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

如何对R语言data.frame中连续相同group的value求和?

对连续相同分组的数值求和

原始数据生成

首先用以下R代码生成目标数据框:

set.seed(123)
df <- data.frame(group = sample(c("a", "b", "c"), 20, replace = TRUE),
                 value = round(runif(20)*10))

生成的原始数据如下:

group value
1      c    10
2      c     7
3      c     7
4      b     5
5      c     6
6      b     3
7      b     1
8      b    10
9      c     9
10     a     7
11     b     8
12     b     0
13     a     5
14     b     8
15     c     2
16     a     3
17     c     2
18     c     1
19     a     4
20     a     4

需求说明

需要对**连续相同group**对应的value进行求和,最终得到如下结果:

group values
1      c     24
2      b      5
3      c      6
4      b     14
5      c      9
6      a      7
7      b      8
8      a      5
9      b      8
10     c      2
11     a      3
12     c      3
13     a     8

解决方案

核心思路是先为连续相同的group生成唯一分组标识,再按该标识分组求和,以下提供两种实现方式:

方式1:Base R实现

# 生成连续分组标识:当前行group与上一行不同时,计数递增
df$group_id <- cumsum(c(TRUE, df$group[-1] != df$group[-nrow(df)]))

# 按分组标识和group聚合求和
result <- aggregate(value ~ group + group_id, df, sum)
# 整理结果格式
result <- result[, c("group", "value")]
colnames(result) <- c("group", "values")

print(result)

方式2:dplyr包实现

如果熟悉tidyverse生态,可使用更简洁的管道式代码:

library(dplyr)

result <- df %>%
  # 生成连续分组标识,处理首行无前置行的情况
  mutate(group_id = cumsum(group != lag(group, default = first(group)))) %>%
  # 按分组标识和group求和
  group_by(group_id, group) %>%
  summarise(values = sum(value), .groups = "drop") %>%
  # 移除辅助的group_id列
  select(group, values)

print(result)

两种方式都能精准识别连续相同的group并完成求和,最终输出与预期一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:31