如何使用flextable在列中按行添加百分比(同列含计数与占比)
在flextable中同一列同时显示计数与百分比
要实现分组统计行显示「计数 (百分比%)」的格式,比如setosa对应列显示为“45 (31%)”,可以按以下步骤操作:
- 先完成分组统计并添加总计行,提取总计值用于计算百分比
- 将计数与百分比合并为格式化字符串
- 用flextable渲染最终表格
完整代码示例:
library(dplyr) library(datasets) library(janitor) library(flextable) data(iris) # 1. 分组统计+添加总计行 df <- iris %>% group_by(Species) %>% summarize("Big Sepals" = sum(Sepal.Length > 4.5)) %>% adorn_totals("row") # 2. 计算百分比并合并列内容 total_val <- df$`Big Sepals`[df$Species == "Total"] df <- df %>% mutate( `Big Sepals` = if_else( Species != "Total", sprintf("%d (%.0f%%)", `Big Sepals`, (`Big Sepals`/total_val)*100), as.character(`Big Sepals`) # 总计行保留原数值 ) ) # 3. 生成flextable表格 flextable(df)
关键说明
- 用
adorn_totals生成总计行后,提取总计值total_val作为百分比计算的分母 - 通过
sprintf格式化字符串,实现「计数 (百分比%)」的显示效果,%.0f%%表示百分比保留0位小数 - 用
if_else区分分组行和总计行,确保总计行只显示总计数
内容的提问来源于stack exchange,提问作者Tina Heeley
相关产品推荐
相关产品推荐

