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

如何在R中用aggregate()按团队和日期范围计算条件均值并添加至数据集?

用aggregate()实现按Team和滚动时间窗口计算均值

首先构造示例数据集:

df <- data.frame(
  day = c(1,1,1,2,2,2,3,3,3),
  team = c("A","B","C","A","B","C","A","B","C"),
  data = c(5,2,1,2,3,1,0,2,1)
)
range <- 2  # 定义时间窗口范围

实现步骤

  1. 为每行生成唯一窗口标识:结合team、窗口起始日(max(1, day - range + 1))和当前day,生成window_key,确保同一窗口内的行拥有相同标识。
  2. 用aggregate()按window_key分组计算data的均值。
  3. 将计算得到的均值合并回原数据集,整理列顺序和名称。

完整代码

# 生成窗口标识
df$window_key <- with(df, paste0(team, "_", pmax(1, day - range + 1), "_", day))

# 用aggregate计算每个窗口的均值
mean_df <- aggregate(data ~ window_key, data = df, FUN = mean)

# 合并均值到原数据集
df <- merge(df, mean_df, by = "window_key", suffixes = c("", "_mean"))

# 整理列顺序和名称,恢复原数据排序
df <- df[, c("day", "team", "data", "data_mean")]
colnames(df)[4] <- "mean"
df <- df[order(df$day, df$team), ]
rownames(df) <- NULL

结果验证

运行后得到的数据集与示例要求一致:

day team data mean
1   1    A    5 5.0
2   1    B    2 2.0
3   1    C    1 1.0
4   2    A    2 3.5
5   2    B    3 2.5
6   2    C    1 1.0
7   3    A    0 1.0
8   3    B    2 2.5
9   3    C    1 1.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:25