ここにいくつかのアプローチがあります:
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
。
更新いくつかの改善と追加の解決策。