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

R语言如何按第二列累计和阈值灵活分组聚合并计算统计量

R 连续行按累计阈值分组聚合实现方案

需求说明

将数据集连续行按第二列d的累计和约等于预设阈值(示例取100)划分分组,再对每个分组内的x列计算计数、均值、求和等统计量。

实现代码

方式1:tidyverse 实现(可读性高)

先加载依赖包:

library(dplyr)
library(purrr)

生成分组变量并统计:

# 预设阈值
threshold <- 100

# 1. 生成分组标签
dat <- dat %>%
  mutate(
    # 累计d的和,超过阈值就重置累加
    acc_d = accumulate(d, ~ifelse(.x + .y > threshold, .y, .x + .y)),
    # 累加重置时触发新分组(重置时acc_d等于当前行d值)
    group = cumsum(acc_d == d)
  )

# 2. 分组统计
group_stat <- dat %>%
  group_by(group) %>%
  summarise(
    # 每组行数
    row_count = n(),
    # 每组d的累计和,可验证是否接近阈值
    d_cumsum = sum(d),
    # x列统计量
    x_mean = mean(x),
    x_sum = sum(x),
    .groups = "drop"
  )

方式2:基础R 实现(无需依赖额外包)

threshold <- 100
group_id <- integer(nrow(dat))
current_acc <- 0
current_group <- 1

# 生成分组标签
for (i in seq_len(nrow(dat))) {
  if (current_acc + dat$d[i] > threshold) {
    current_group <- current_group + 1
    current_acc <- dat$d[i]
  } else {
    current_acc <- current_acc + dat$d[i]
  }
  group_id[i] <- current_group
}
dat$group <- group_id

# 分组统计
group_stat <- aggregate(
  x ~ group, 
  dat, 
  FUN = function(col) {
    c(
      row_count = length(col),
      x_mean = mean(col),
      x_sum = sum(col)
    )
  }
)
# 配合sum(d ~ group, dat)可查看每组d的累计和

结果验证

运行后查看每组d的累计和均在100左右,符合「累计和约等于预设阈值」的需求,同时可直接获取x列对应的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:03