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

如何按滚动3行块对R语言DataFrame进行聚合求和?

解决滚动窗口分组求和的问题

要实现你想要的滚动3行分组(比如a-b-c、c-d-e这类重叠窗口)并使用aggregate求和,关键是先自动生成滚动窗口的分组标签,再基于标签聚合。下面是具体步骤和代码:

步骤1:生成滚动窗口的分组标签

首先定义窗口大小(这里是3)和滑动步长(你例子里是2,因为窗口重叠1个元素),然后为每个窗口生成对应的分组字符串:

# 你的原始DataFrame
df <- data.frame(score=letters[1:15], total1=1:15, total2=16:30)

# 定义窗口参数
window_size <- 3
step <- 2 # 步长为2,实现窗口重叠1个元素

# 计算每个窗口的起始索引,确保不超出数据行数
start_indices <- seq(1, nrow(df), by = step)
start_indices <- start_indices[start_indices + window_size - 1 <= nrow(df)]

# 生成每个窗口的分组名称(如"a-b-c")
group_names <- sapply(start_indices, function(i) {
  paste(df$score[i:(i + window_size - 1)], collapse = "-")
})

步骤2:为数据框添加分组标签

把每个窗口对应的行标记为同一个分组:

df$group <- NA
for (i in seq_along(start_indices)) {
  row_range <- start_indices[i]:(start_indices[i] + window_size - 1)
  df$group[row_range] <- group_names[i]
}

步骤3:使用aggregate求和

现在就可以按分组标签聚合total1和total2的和了:

result <- aggregate(cbind(total1, total2) ~ group, data = df, FUN = sum)
# 重命名列名符合你的预期
colnames(result) <- c("groups", "sum1", "sum2")

print(result)

运行后你会得到类似这样的结果:

groups sum1 sum2
1  a-b-c    6   51
2  c-d-e   12   57
3  e-f-g   18   63
4  g-h-i   24   69
5  i-j-k   30   75
6  k-l-m   36   81
7  m-n-o   42   87

为什么你之前的方法不对?

你之前用df$score %in% c('a','b','c')这种方式手动指定分组,不仅无法自动化处理滚动窗口,还会把分散的行(如果存在重复值的话)归为一组,完全不符合滚动连续窗口的需求。而通过自动生成连续窗口的分组标签,就能完美匹配你的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:49