如何为R语言汇总表添加带条件计数的总计行?
解决方案:给汇总表添加统计正数行数的总计行
方法一:用janitor的adorn_totals自定义计算逻辑
原来的adorn_totals默认对列求和,你只需传入自定义函数,让它统计列中值大于0的行数即可。注意要先取消分组,否则adorn_totals会出错。
代码示例:
region <- c("R1", "R2", "R3", "R4", "R5", "R1", "R2", "R3", "R4", "R5") housing <- c(0,1,1,1,1,0,1,0,0,1) food <- c(1,1,0,1,1,0,1,0,0,1) df <- data.frame(region,housing,food) library(janitor) library(dplyr) df %>% group_by(region) %>% summarise(across(housing:food, sum, na.rm = TRUE)) %>% ungroup() %>% # 必须取消分组,否则adorn_totals无法正常工作 adorn_totals(where = "row", name = "Total", fun = function(x) sum(x > 0)) # 自定义统计正数行数的函数
运行后,总计行的housing列会显示汇总表中housing值大于0的行数(示例中为4),food列同理。
方法二:用dplyr原生函数直接添加总计行
如果不想依赖janitor包,用dplyr的add_row结合across就能简洁实现需求:
df %>% group_by(region) %>% summarise(across(housing:food, sum, na.rm = TRUE)) %>% add_row( region = "Total", across(housing:food, ~sum(.x > 0)) # 对每列统计正数行数 )
这个方法用dplyr原生函数完成,逻辑直观且无需额外加载包。
内容的提问来源于stack exchange,提问作者fernaldd
相关产品推荐
相关产品推荐

