使用dplyr按因子聚合:如何分别统计TRUE/FALSE组的求和结果
解决dplyr按因子分组求和未拆分组的问题
示例数据代码
library(dplyr) group1 <- c(TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE) variable_a <- c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3) variable_b <- c(5, 8, 6, 8, 4, 5, 9, 2, 4, 5, 8, 6, 8, 4, 5, 9, 2, 4) df <- data.frame(group1, variable_a, variable_b) df$group1 <- as.factor(group1)
问题场景
尝试用dplyr按group1分组求和:
table_aggregate <- df %>% group_by(group1) %>% summarise(sum_variable_a = sum(variable_a), sum_variable_b = sum(variable_b))
但结果将所有值聚合为一行,无法分别展示group1中TRUE和FALSE组的求和结果。
解决办法
你的代码逻辑本身是正确的,正常执行后应返回两行分组结果。若出现异常,可参考以下方案排查:
- 清理环境残留分组:如果之前对
df执行过其他分组操作且未取消,会导致分组逻辑混乱,先取消分组再重新执行:table_aggregate <- df %>% ungroup() %>% group_by(group1) %>% summarise(sum_variable_a = sum(variable_a), sum_variable_b = sum(variable_b)) - 明确分组保留规则:在
summarise中添加.groups参数,强制保留分组变量:table_aggregate <- df %>% group_by(group1) %>% summarise(sum_variable_a = sum(variable_a), sum_variable_b = sum(variable_b), .groups = "keep") - 更新dplyr版本:旧版本dplyr可能存在分组逻辑缺陷,更新到最新版本后重试。
预期正确结果
# A tibble: 2 × 3 group1 sum_variable_a sum_variable_b <fct> <dbl> <dbl> 1 FALSE 24 46 2 TRUE 21 52
内容的提问来源于stack exchange,提问作者KT_1
相关产品推荐
相关产品推荐

