如何使用dplyr实现分组总计数与组内子集计数统计
分组多维度计数实现方法
n()函数本身不支持传入筛选参数,设计上仅用于无参数返回当前分组的全部观测行数。要统计组内指定子集的观测数,直接在summarize()中搭配逻辑判断求和即可:逻辑判断返回的TRUE会被识别为1、FALSE识别为0,求和结果刚好就是符合条件的观测总数。
完整实现代码
library(dplyr) df <- data.frame( Group=c('A','A','B','B','B'), Size=c('Large','Large','Large','Small','Small') ) df_summary <- df %>% group_by(Group) %>% summarize( group_n = n(), Large_n = sum(Size == "Large") )
运行结果
执行代码后得到的结果完全匹配目标格式:
# A tibble: 2 × 3 Group group_n Large_n <chr> <int> <int> 1 A 2 2 2 B 3 1
注意事项
- 上述条件统计写法支持任意复杂的筛选规则,比如多条件组合判断
sum(Size == "Large" & num_col > 10)、枚举值匹配判断sum(Size %in% c("Large", "Medium"))都可正常统计。 - 如果偏好更显式的写法,也可以将统计逻辑写为
sum(ifelse(Size == "Large", 1, 0)),运行效果和直接对逻辑值求和完全一致。
内容的提问来源于stack exchange,提问作者Michael Clauss
相关产品推荐
相关产品推荐

