说我有如下数据表
DT <- data.table(DATE = as.Date(1:10), X = 1:100)
(X应该大于10,因为每个日期只有一个观测值,什么也不会出来) 如何计算具有先前k(例如5)X的rollmean的每个X? 结果应如下:
DATE X rollmean
1: 1970-01-02 1 NA
2: 1970-01-03 2 NA
3: 1970-01-04 3 NA
4: 1970-01-05 4 NA
5: 1970-01-06 5 NA
6: 1970-01-07 6 3 # mean(1:5)
7: 1970-01-08 7 4 # mean(2:6)
8: 1970-01-09 8 5 # mean(3:7)
9: 1970-01-10 9 6 # mean(4:8)
10: 1970-01-11 10 7 # mean(5:9)
我尝试过zoo::rollmean
,但似乎只接受“前进”方向,而不接受“后退”方向。非常感谢。
跟进问题,即使我也想知道是否要计算前面的3行乘2行?就像row8,X = 8,我想获取mean(3:5)的值
答案 0 :(得分:1)
您可以使用Zoo Zoo轻松做到
library(zoo)
DT$rollmean <- rollmeanr(DT$X,5,fill=NA)
答案 1 :(得分:1)
在data.table 1.12.0中,有一个新的frollmean
函数,因此您可以执行以下操作
DT = data.table(DATE = as.Date(1:10, origin="1970-01-01"), X = 1:100)
ans = DT[1:10
][, rollmean:=shift(frollmean(X, 5))
][]
ans
# DATE X rollmean
# 1: 1970-01-02 1 NA
# 2: 1970-01-03 2 NA
# 3: 1970-01-04 3 NA
# 4: 1970-01-05 4 NA
# 5: 1970-01-06 5 NA
# 6: 1970-01-07 6 3
# 7: 1970-01-08 7 4
# 8: 1970-01-09 8 5
# 9: 1970-01-10 9 6
#10: 1970-01-11 10 7