ですから私はzoo::rollapply()
かなり信心深く使ってきましたが、私が見ている問題には適切ではないと思います。縮小ローリングウィンドウを実装したいという要件があります。たとえば、次のサンプルデータがあります。
v <- data.frame(date=as.Date("2012-1-2") + 0:4, vals=c(1,2,3,4,5))
v
date vals
1 2012-01-02 1
2 2012-01-03 2
3 2012-01-04 3
4 2012-01-05 4
5 2012-01-06 5
ローリングウィンドウを日付の降順で移動させrev(v$date)
たいので、順序については、次のように値を合計します[ウィンドウごとに1ずつ遅れます](下の各行はウィンドウです)。
5 + 4 + 3 + 2 + 1 = 15
4 + 3 + 2 + 1 = 10
3 + 2 + 1 = 6
2 + 1 = 3
1 = 1
したがって、data.frameは次のようになると思います。
# date vals new_val
#1 2012-01-02 1 1
#2 2012-01-03 2 3
#3 2012-01-04 3 6
#4 2012-01-05 4 10
#5 2012-01-06 5 15
注:上記の例では、
sum(x)
関数を使用して各ウィンドウを計算するとします。これを任意に一般化するのは素晴らしいことfunction(x)
です。まあ言ってみればfunction(x) { (min(x) + max(x)) * length(x) * sum(x) }
注:私はベースRの実装を好みますが、適用できる可能性のある他のパッケージも興味深いでしょう
これが使用しているものです sapply
v <- data.frame(date=as.Date("2012-1-2") + 0:4, vals=c(1,2,3,4,5))
v <- data.frame(v[order(rev(v$date)), ],
"new_val" = sapply(1:nrow(v), function(x) sum(v[order(rev(v$date)), "vals"][x:5])))
> v
date vals new_val
5 2012-01-06 5 15
4 2012-01-05 4 10
3 2012-01-04 3 6
2 2012-01-03 2 3
1 2012-01-02 1 1
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加