1

下面给出的这条线将简单地计算窗口为 3 的某些值的移动平均值。由于值的总数为 12,移动平均窗口为 3,因此结果值的数量为 10(如下所示)。

library(zoo)
x <- c(1,2,3,NA,NA,4,6,5,6,4,2,5)
movingmean <- rollapply(x, 3, FUN = mean, na.rm = T)
movingmean
#  [1] 2.000000 2.500000 3.000000 4.000000 5.000000 5.000000
#  [7] 5.666667 5.000000 4.000000 3.666667

我想movingmean从相应的原始值中减去这些平均值 ( )。

示例: 2-2.000000, 3-2.500000, NA-3.000000, NA-4.000000, ..., 2-3.666667

4

3 回答 3

3

默认情况下,rollapply不使用 填充结果NA。设置fill=NA这样做。

movingmean <- rollapply(x, 3, FUN=mean, na.rm=TRUE, fill=NA)
x - movingmean
#  [1]         NA  0.0000000  0.5000000         NA         NA
#  [6] -1.0000000  1.0000000 -0.6666667  1.0000000  0.0000000
# [11] -1.6666667         NA

另请注意,rollapply默认情况下使用居中窗口。如果需要右对齐计算(与大多数时间序列一样),您可以通过参数更改它align或使用。rollapplyr

于 2013-02-14T16:04:58.860 回答
1

您可以将平均函数更改为:

library(zoo)
x <- c(1,2,3,NA,NA,4,6,5,6,4,2,5)
> rollapply(x, 3, FUN = function(x) (x-mean(x))[2])
于 2013-02-14T15:53:59.490 回答
1

这个怎么样?

x[seq_along(movingmean)+1] - movingmean

# [1]  0.0000000  0.5000000         NA         NA -1.0000000  1.0000000 
#        -0.6666667  1.0000000  0.0000000 -1.6666667
于 2013-02-14T16:05:02.810 回答