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
相关产品推荐
相关产品推荐

