1

Zoo オブジェクトのリストがある場合、特定の値をリスト インデックス ([[]]) と日付で参照するにはどうすればよいですか? 例えば:

require("zoo")
require("tseries")
require("lubridate")

z = zoo(c(1,2,3), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1")))
z1 = zoo(c(1,2,3), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1")))
z2 = zoo(c(10,20,30), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1")))
z3 = zoo(c(100,200,300), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1")))
> l = list(z1,z2,z3)
> l
[[1]]
2000-01-01 2000-02-01 2000-03-01 
         1          2          3 

[[2]]
2000-01-01 2000-02-01 2000-03-01 
        10         20         30 

[[3]]
2000-01-01 2000-02-01 2000-03-01 
       100        200        300 

私の目標は、インデックスから月の列番号を持つ各行の値を返すことです。上記のデータに対する望ましい出力は次のようになります。

1, 20, 300(zoo オブジェクト、ベクトルなど、最も簡単に表示できるものであれば何でもかまいません)。必要に応じて強制します。

私がそれをコーディングしようとしてきた方法は(とりわけ)です:

monthNumbs = month(index(l[[1]]))
l[[monthNumbs]][index(l)]

これは構造的に正しくないことはわかっています。しかし、それは私がデータ構造をどのように見ているかです。どんな助けでも素晴らしいでしょう...

4

1 に答える 1

3

あなたの質問をよく理解していれば、たとえば次のことができると思います。

## loop through the index of the list
## for each zoo object l[[x]]  you get months index
## and you compare it to current index
unlist(lapply(seq_along(l),
        function(x)l[[x]][month(index(l[[x]]))==x]))
[1]   1  20 300

編集xtsパッケージを使用した別の代替手段:

すべてのzooオブジェクトが同じインデックスを持っている場合、それらをマージしてマトリックス構造を取得できます。

library(xts)
mm <- do.call(merge,lapply(l,as.xts))
           c.1..2..3. c.10..20..30. c.100..200..300.
2000-01-01          1            10              100
2000-02-01          2            20              200
2000-03-01          3            30              300

次に、次のような対角値を取得します。

as.matrix(mm)[col(mm)==row(mm)]
于 2013-08-05T23:00:16.523 に答える