R 如何正确对齐滚动平均值

R 如何正确对齐滚动平均值,r,data.table,zoo,R,Data.table,Zoo,我在用rollmean library(zoo) library(TTR) library(data.table) date = seq(as.Date("2016-01-01"),as.Date("2016-01-10"),"day") value =seq(1,10,1) mydata = data.frame (date, value) mydata setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) rollmean(v

我在用rollmean

library(zoo)
library(TTR)
library(data.table)
date = seq(as.Date("2016-01-01"),as.Date("2016-01-10"),"day")
value =seq(1,10,1)
mydata = data.frame (date, value)
mydata
setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) rollmean(value, x, fill = rep(NA,x-1),align="right") ),][]

         date value F12 F13
 1: 2016-01-01     1  NA  NA
 2: 2016-01-02     2 1.5  NA
 3: 2016-01-03     3 2.5   2
 4: 2016-01-04     4 3.5   3
 5: 2016-01-05     5 4.5   4
 6: 2016-01-06     6 5.5   5
 7: 2016-01-07     7 6.5   6
 8: 2016-01-08     8 7.5   7
 9: 2016-01-09     9 8.5   8
10: 2016-01-10    10 9.5   9

我想用前面的n个观测值来计算一行的平均值。从上面的数据中可以看出,F12第二行的平均值为1.5,即2和1的平均值。我希望它是NA,1.5出现在第3行中,这样第3行中F12的平均值将是1.5。可能吗?我尝试更改align参数,但没有成功。谢谢。

我们可能需要用
shift
来包装它:

setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) 
     shift(rollmean(value, x, fill = NA, align="right")) )]

请注意,这些函数中的任何一个都可以交替使用。第一个使用
rollmeanr
,第二个使用
rollapply
,不涉及
shift
<代码>函数(x)移位(平均值(值,x,填充=NA))或
函数(x)滚动应用(值,列表(-seq_len(x)),平均值,填充=NA)