これは実際にapply.weekly
について学んだ私のquestionの延長です。これはうまくいきますが、幅広いzoo
オブジェクトでこれを実行したいと思います。私は広いzoo
にapply.weekly
を使用する場合には、列を合計し、その後、毎週集計実行:広い動物園のオブジェクトにxtsベクター操作をすばやく適用しますR
> library(xts)
> set.seed(2001)
> zoo.daily <- zoo(data.frame(a=rnorm(20), b=rnorm(20), c=rnorm(20)), order.by=as.Date("2001-05-25") + 0:19)
> apply.weekly(zoo.daily, sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370
> apply.weekly(zoo.daily[, 1] + zoo.daily[, 2] + zoo.daily[, 3], sum)
2001-05-27 2001-06-03 2001-06-10 2001-06-13
1.091999 -3.017688 3.842305 2.045370
を私は、オペレータのapply
家族を試してみましたが、それらはzoo
日付インデックスを取り除くように見えます。私はfor
ループでそれを行うことができますが、実際には時間がかかります(多くの場合、as.yearmon
の周期性のaggregate
関数よりも4分の1以上遅い)。
week.ends <- index(zoo.daily[endpoints(zoo.daily, "weeks")[-1], ])
num.weeks <- nweeks(zoo.daily)
num.stocks <- ncol(zoo.daily)
zoo.weeks <- zoo(matrix(NA, num.weeks, num.stocks), order.by=week.ends)
for (i in seq(num.stocks)) {
zoo.weeks[, i] <- apply.weekly(zoo.daily[, i], mean)
}
(すなわち、別々の各ベクトルを保持します)動作します:ここでfor
ループです
2001-05-27 -0.36663040 -0.108648725 0.8392788
2001-06-03 0.33032998 0.003025018 -0.7644534
2001-06-10 0.07816992 0.620198931 -0.1494681
2001-06-13 0.02114608 0.956226189 -0.2955824
はすぐにapply.weekly
ですべての列を操作する方法はありますか?ありがとう!
更新:Joshua Ulrichは、カラム認識機能(colMeans
またはcolSums
など)が必要であることを指摘しています。私がこれをするとき、私は正解を得るが、転置行列として。私はちょうどreclassと移動する必要がありますか?または、オプション/設定が間違っていますか?
> apply.weekly(zoo.daily, colSums)
[,1] [,2] [,3] [,4]
a -1.0998912 2.31230989 0.5471894 0.06343824
b -0.3259462 0.02117512 4.3413925 2.86867857
c 2.5178365 -5.35117351 -1.0462765 -0.88674717
あなたの更新について:R-鍛造からXTSをインストールします。 Jeffは数週間前にそれを修正しましたが、まだCRANには適用されていません。 –