我该如何与之前的数据进行比较,并与data.table与当前数据进行比较

时间:2019-02-19 07:57:46

标签: r data.table

说我有如下数据表

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)的值

2 个答案:

答案 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