You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:15:19