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

在R中基于name_ex与rounds过滤实现分组滚动求和的技术问询

按分组计算滚动求和并基于累计值过滤

核心需求实现

先构造示例数据方便演示:

library(dplyr)
library(zoo)

set.seed(123)
df <- tibble(
  name_ex = rep(c("A", "B"), each = 8),
  rounds = sample(1:3, 16, replace = TRUE),
  stat1 = rnorm(16),
  stat2 = rnorm(16)
)

按name_ex分组,对stat1和stat2分别计算前3行的滚动求和(窗口大小3,包含当前行),确保分组数据完全隔离:

core_result <- df %>%
  group_by(name_ex) %>%
  mutate(
    # rollsumr 实现向右对齐的滚动求和,k=3表示取当前行及前2行的和
    # fill=NA 保证分组内前2行因不足3行返回NA
    stat1_rollsum3 = rollsumr(stat1, k = 3, fill = NA),
    stat2_rollsum3 = rollsumr(stat2, k = 3, fill = NA)
  ) %>%
  ungroup()

进阶需求实现

基于rounds累计值在10-12区间的行,对stat1和stat2求和:

advanced_result <- df %>%
  group_by(name_ex) %>%
  mutate(rounds_cum = cumsum(rounds)) %>%  # 计算每个分组内rounds的累计值
  filter(between(rounds_cum, 10, 12)) %>%  # 筛选累计值处于10-12的行
  summarise(
    stat1_total = sum(stat1),
    stat2_total = sum(stat2),
    .groups = "drop"
  )

问题修正说明

  • 之前未正确隔离分组数据:确保group_by(name_ex)后所有计算(包括rollsumr)都在分组内执行,最后用ungroup()取消分组即可避免跨分组污染。
  • 无法按累计值过滤:先通过cumsum(rounds)计算分组内的累计值,再用between()筛选目标区间,最后汇总求和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:24:25