2011-01-28 7 views
8

の男と、通常:rollapply「成長」ウィンドウ

tmp = zoo(rnorm(100), 1:100) 
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right") 

かなり正しくrollapplyを10個の要素が用意されていた瞬間から値の計算を開始します。

残念ながら、主観的な10の観察のためにできるだけ多くのデータを使用する必要があります。スライディングウィンドウを使用するのに十分なデータがあるまで、本質的にデータウィンドウが増えます。 1、1:2、1:3、1:4など、少なくとも10個の要素があり、通常のようにウィンドウをスライドさせるまで。

これを行うには、醜いforループよりも良い方法がありますか?

答えて

4

最初に9つのNAsをシリーズに貼り付けてみませんか? "ugly for loops"よりもはるかに優れています。

tmp = zoo(c(rep(NA,9), rnorm(100)), 1:109) 
zoo(rollapply(tmp, 10, function(x) quantile(x, 0.05, na.rm = TRUE), 
       align="right"), 1:100) 
10

rollapply(動物園ではpartial=TRUE)と指定できます。

> library(zoo) 
> 
> rollapplyr(zoo(1:20), 3, sum, partial=TRUE) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
1 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 
+0

'rollapply'関数の定義が変更されているようです。関数の呼び出しは、 'rollapply(1:20、3、FUN = sum、align =" right "、partial = TRUE)のようになります。 – steadyfish

+0

ありがとう。修正しました。 –