如何使用dplyr实现数据分组计数并输出分类统计结果
完全可以用dplyr配合tidyr实现这个分组宽表统计需求,核心步骤很简单:
- 先按部门、审核状态两个维度分组计数
- 把长格式计数结果转成宽表,没有出现的状态组合计数填0
- 重命名列和你需要的字段名对齐
完整可运行代码如下:
# 加载需要的包,未安装的话可以先跑install.packages(c("dplyr","tidyr")) library(dplyr) library(tidyr) # 你提供的原始数据集 depa2<-c("La Paz","La Paz","La Paz" ,"La Paz" , "La Paz" , "La Paz" , "La Paz" , "La Paz" , "La Paz" ,"La Paz" , "La Paz","Cabañas" ,"Cabañas" , "Usulután" , "Usulután" ,"Usulután" ,"Usulután" , "Usulután") condition<-c( "Aprobado", "Reprobado", "Reprobado", "Reprobado", "Reprobado" ,"Reprobado", "Aprobado" ,"Aprobado", "Reprobado" ,"Aprobado" , "Reprobado", "Reprobado", "Reprobado" ,"Reprobado" , "Aprobado", "Reprobado" , "Aprobado", "Reprobado") data<-data.frame(depa2,condition) # 计算统计结果 stat_result <- data %>% count(depa2, condition, name = "cnt") %>% pivot_wider( names_from = condition, values_from = cnt, values_fill = 0 # 没有对应取值的分组计数填0 ) %>% rename( Aprobados = Aprobado, Reprobados = Reprobado ) # 打印结果 print(stat_result)
注意:你给出的预期结果里的数值和提供的原始数据不匹配,按你贴的原始数据集计算,正确的统计结果如下:
depa2 Aprobados Reprobados La Paz 4 7 Cabañas 0 2 Usulután 2 3
如果你用的是比较旧的tidyr版本,没有pivot_wider函数,可以把转宽表的部分替换成spread函数,效果完全一致:
stat_result <- data %>% count(depa2, condition) %>% spread(condition, n, fill = 0) %>% rename(Aprobados = Aprobado, Reprobados = Reprobado)
内容的提问来源于stack exchange,提问作者yefersonG
相关产品推荐
相关产品推荐

