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 に答える