データの先頭から累積的に拡大するデータ ウィンドウで R rollapply を使用する方法を理解しようとしています。
時間 t で、ロール適用は 1:t 範囲のデータを使用する必要があります。時間 t+1 では、1:t+1 を使用する必要があります。
どうもありがとうジョン
1) rollapplyr (2 番目のwidth
引数) は幅のベクトルにすることができるため、x
が入力ベクトルでf
あり、適切な関数である場合:
rollapplyr(x, seq_along(x), f)
たとえば、f
がの場合sum
、上記は と同じでcumsum(x)
あり、が でf
あるmax
場合、上記は と同じcummax(x)
です。
Achim は、これも機能すると指摘しました。
rollapplyr(x, length(x), f, partial = TRUE)
2) 削減上記はおそらくあなたが望むものですが、代わりに、特定の関数 (2 つの引数を受け入れる必要があり、最終的な答えとして反復適用が適している必要があります) についてはReduce
、R のベースで使用できます。たとえば、以下cumsum
にcummmax
対応します。
Reduce(`+`, x, accumulate = TRUE)
Reduce(max, x, accumulate = TRUE)
これらは累積平均を与えないことに注意してください。
Reduce(mean, x, accumulate = TRUE) # BAD
Reduce(function(x, y) (x+y)/2, x, accumulate = TRUE) # BAD
これは累積平均を与えますが:
Reduce(`+`, x, accumulate = TRUE) / seq_along(x) # ok
要約Reduce
すると、特定の制限されたケースでのみ機能します。
が必要な場合は、(関数mean
を使用して)試すことができますbase R
cumsum(v1)/seq_along(v1)
#[1] 4.0 3.0 3.0 2.5 3.0
また
sapply(seq_along(v1), function(i) mean(v1[1:i]))
#[1] 4.0 3.0 3.0 2.5 3.0
v1 <- c(4,2,3,1,5)