0

データの先頭から累積的に拡大するデータ ウィンドウで R rollapply を使用する方法を理解しようとしています。

時間 t で、ロール適用は 1:t 範囲のデータを使用する必要があります。時間 t+1 では、1:t+1 を使用する必要があります。

どうもありがとうジョン

4

2 に答える 2

6

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 のベースで使用できます。たとえば、以下cumsumcummmax対応します。

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すると、特定の制限されたケースでのみ機能します。

于 2014-11-28T14:46:53.083 に答える
1

が必要な場合は、(関数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)
于 2014-11-28T14:26:55.493 に答える