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

