2

次の動物園のオブジェクトを検討してください。

 x <- data.frame(Date = seq(as.Date("2013-02-01"), length=6, by="1 month") - 1, x = seq(6))
 y <- data.frame(Date = seq(as.Date("2013-02-01"), length=4, by="1 month"), y = seq(4))
 z <- data.frame(Date = seq(as.Date("2012-11-01"), length=9, by="1 month"), z = seq(9))

 x.zoo = zoo(x[,-1], order.by = x[,1])
 y.zoo = zoo(y[,-1], order.by = y[,1])
 z.zoo = zoo(z[,-1], order.by = z[,1])

3 つの動物園オブジェクトの長さが異なることに注意してください。変数"x"の日付に関してすべてのオブジェクトを整列させたい: つまり、日付列 (オブジェクト x のインデックス) を含む新しいデータフレームを作成し、各変数を最も近い値で埋めたい利用可能な観察。

これが私が探している結果です:

         Date x  y  z
 1 2013-01-31 1  1  4
 2 2013-02-28 2  2  5
 3 2013-03-31 3  3  6
 4 2013-04-30 4  4 NA
 5 2013-05-31 5 NA NA
 6 2013-06-30 6 NA NA

実際には、x に合わせたい変数が 10 個あることに注意してください。パッケージの関数は認識していますが、複数の動物園オブジェクトのコンテキストでそれを適応させる方法がわかりませna.locfん。zoo

とにかく効率的にそれを行うことができますか?

ありがとうございました!

4

2 に答える 2

5

これを試して:

xx.zoo <- aggregate(x.zoo, as.yearmon)
yy.zoo <- aggregate(y.zoo, as.yearmon)
zz.zoo <- aggregate(z.zoo, as.yearmon)
out <- merge(x = xx.zoo, y = yy.zoo, z = zz.zoo, all = c(TRUE, FALSE, FALSE))

または、書きたくない場合:

L <- setNames(list(x.zoo, y.zoo, z.zoo), c("x", "y", "z"))
all. <- c(TRUE, rep(FALSE, length(L) - 1))  # all FALSE except first
out <- do.call(merge, c(lapply(L, aggregate, as.yearmon), all = list(all.)))

与える:

> out
         x  y z
Jan 2013 1 NA 3
Feb 2013 2  1 4
Mar 2013 3  2 5
Apr 2013 4  3 6
May 2013 5  4 1
Jun 2013 6 NA 2

年始の時刻が望ましいかもしれませんが、時刻が時刻と同じであることが重要な場合は、次のようにx.zoo追加します。

time(out) <- time(x.zoo)

更新: マイナーな改善。

于 2013-10-15T21:26:01.833 に答える