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

R data.table 如何计算指定id特定日期范围的列均值并赋值给该id所有行

问题原因

你原有代码的问题出在by = (day %in% 1:2)的设置:该参数会将id=1的所有行自动拆分为两个独立分组,day属于1-2是第一个分组,day不属于1-2(也就是day=3)是第二个分组,两个分组会分别计算均值,因此才会出现第3天得到单独均值的结果。

正确修改代码

针对你当前需要给id=1所有行统一赋值1-2天均值的需求,直接去掉by参数,在mean函数内先筛选符合日期范围的数值即可:

example[id == 1, mean_over_days := mean(mean_day[day %in% 1:2], na.rm = TRUE)]

运行后id=1的9行数据的mean_over_days字段都会统一为1-2天的均值,符合你的预期。

如果后续你需要给不同id设置不同的日期范围批量计算,可以参考通用写法:

# 先构建各id对应的计算日期范围对照表
range_dt <- data.table(
  id = c(1, 2),
  start_day = c(1, 2),
  end_day = c(2, 3)
)
# 按id分组批量计算对应范围的均值
example[, mean_over_days := {
  cur_range <- range_dt[id == .BY[[1]]]
  mean(mean_day[day >= cur_range$start_day & day <= cur_range$end_day], na.rm = TRUE)
}, by = id]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:48:03