R语言按指定条件对多行数据分组求和的实现方法
R实现分组聚合生成指定分类汇总记录方案
核心思路
你之前用group_by+mutate未成功的核心原因是:mutate不会折叠原数据行,只会给现有行新增列,无法生成汇总后的精简结果集。正确逻辑是先把原有city值映射到你需要的X/Y新分类,再按name+新分类做分组求和。
步骤1:构造样例数据集
首先加载dplyr做数据处理,先构造和你描述一致的样例数据,提前修正原表笔误将0写为O的问题:
# 未安装dplyr的话先运行 install.packages("dplyr") library(dplyr) df <- tibble( name = rep(c("A", "B"), each = 4), city = c("M", "N", "O", "P", "M", "N", "O", "P"), number = c(2, 3, 5, 7, 7, 8, 9, 2) )
注意:如果你的真实数据里存在city值为0的笔误,要先替换为O再做后续计算,否则会漏算对应数值
步骤2:运行聚合代码
通过case_when做分类映射,再分组求和即可得到目标结果:
result <- df %>% # 映射原有城市到新的X/Y分类 mutate(aggregate_city = case_when( city %in% c("M", "N") ~ "X", city %in% c("O", "P") ~ "Y" )) %>% # 按姓名、新分类双字段分组 group_by(name, city = aggregate_city) %>% # 分组求和,自动移除分组结构避免后续操作出错 summarise(number = sum(number), .groups = "drop")
结果验证
运行print(result)即可得到完全符合预期的结果集:
# A tibble: 4 × 3 name city number <chr> <chr> <dbl> 1 A X 5 2 A Y 12 3 B X 15 4 B Y 11
结果匹配要求:
- name为A的记录:X对应求和值5(M=2 + N=3),Y对应求和值12(O=5 + P=7)
- name为B的记录:X对应求和值15(M=7 + N=8),Y对应求和值11(O=9 + P=2)
内容的提问来源于stack exchange,提问作者Abdullah Al Mamun
相关产品推荐
相关产品推荐

