1

を使用して移動平均を行っている abc という名前のデータフレームがありますrollapply。次のコードが機能します。

forecast <- rollapply(abc, width=12, FUN=mean, align = "right", fill=NA)

ここで、幅を可変にして同じことをしたいと思います。つまり、最初の月は空になり、2 番目の月は最初の月の値が来ます。3 か月目は (1 か月目 + 2 か月目/2) になります。つまり、i か月目の場合、 の場合i<=12、値は になり(sum(1:i-1)/(i-1))i>=12によって行われた過去 12 か月の平均になりforecastます。助けてください。

4

1 に答える 1

4

ここにいくつかのアプローチがあります:

1) 部分 = TRUE

n <- length(x)
c(NA, rollapplyr(x, 12, mean, partial = TRUE)[-n])

の末尾にある r に注意してくださいrollapplyr

2) リストとしての幅width引数はrollapply、i 番目のリスト要素が i 番目のローリング計算に使用するオフセットのベクトルであるようなリストにすることができます。partial=TRUE を指定すると、ベクトルの末尾からはみ出すオフセットは無視されます。リストで要素を 1 つだけ指定すると、それはリサイクルされます。

rollapply(x, list(-seq(12)), mean, partial = TRUE, fill = NA)

2a)リサイクルして依存するのではなく、partial書き出すことができます。ここでwidth <- list(numeric(0), -1, -(1:2), -(1:3), ..., -(1:12), ..., -(1:12))、次のように計算できるものが必要です。

width <- lapply(seq_along(x), function(x) -seq_len(min(12, x-1)))
rollapply(x, width, mean)

これは非常に柔軟であるため、仕様を少し変更したい場合に主に役立ちます。

注:コメントの後半で、投稿者は、遅れないようにすることを除いて、同じローリング平均を要求しました. それはちょうどでしょう:

rollapplyr(x, 12, mean, partial = TRUE)

の末尾にある r に注意してくださいrollapplyr

更新いくつかの改善と追加の解決策。

于 2014-07-08T10:47:07.833 に答える