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

如何在R语言中按多列相同值分组生成求和结果列

解决方案

针对你的需求,推荐两种高效且适配大数据量的实现方式,分别基于dplyr和data.table,这两个工具在处理大规模数据集时性能远优于逐行遍历的方法:

方法一:使用dplyr(tidyverse生态)

dplyr的分组+突变操作可以轻松实现需求,代码简洁易读:

# 加载包
library(dplyr)

# 构造示例数据
S1 <- c(1,1,1,0,1,0)
S2 <- c(1,1,1,0,1,0)
S3 <- c(1,0,0,0,0,0)
value <- c(9,5,3,2,4,1)
df <- data.frame(S1,S2,S3,value)

# 分组求和并生成result列
df <- df %>%
  group_by(S1, S2, S3) %>%
  mutate(result = sum(value)) %>%
  ungroup() # 取消分组(可选,后续操作不需要分组时建议执行)

# 查看结果
df

执行后会得到你期望的结果:

S1 S2 S3 value result
1  1  1  1     9      9
2  1  1  0     5     12
3  1  1  0     3     12
4  0  0  0     2      3
5  1  1  0     4     12
6  0  0  0     1      3

方法二:使用data.table(高性能大数据处理)

如果你的数据集行数非常多(比如百万级以上),data.table的内存效率和运行速度会更有优势:

# 加载包
library(data.table)

# 构造示例数据并转为data.table
S1 <- c(1,1,1,0,1,0)
S2 <- c(1,1,1,0,1,0)
S3 <- c(1,0,0,0,0,0)
value <- c(9,5,3,2,4,1)
dt <- data.table(S1,S2,S3,value)

# 分组求和生成result列
dt[, result := sum(value), by = .(S1, S2, S3)]

# 查看结果
dt

为什么你的之前尝试没成功?

  • rowwise()是按单行独立处理,不是按分组聚合,所以无法实现组内求和后映射到每行的需求;
  • sapply()逐行匹配分组的方式本质是循环遍历,不仅代码复杂,而且在数据量大时会非常慢,完全不适用于大规模数据集。

内容的提问来源于stack exchange,提问作者SPI_4324

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26