如何正确对齐滚动均值
How to properly align a rolling mean
我正在使用 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 行,这样 F12 的平均值在第三行是 1.5。那可能吗?我尝试更改对齐参数但没有运气。谢谢。
我们可能需要用shift
包裹起来:
setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x)
shift(rollmean(value, x, fill = NA, align="right")) )]
我正在使用 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 行,这样 F12 的平均值在第三行是 1.5。那可能吗?我尝试更改对齐参数但没有运气。谢谢。
我们可能需要用shift
包裹起来:
setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x)
shift(rollmean(value, x, fill = NA, align="right")) )]