2012-05-14 26 views
3

我有一個xts對象列表。我想用列表中每個級別的最後一行獲取data.frame。從xts對象列表的最後一行生成一個表格

我的名單看起來像:

a <- xts(matrix(1:4,2),as.Date("2012-01-01")+0:1) 
b <-list(a,a*5) 
> b 
[[1]] 
      [,1] [,2] 
2012-01-01 1 3 
2012-01-02 2 4 

[[2]] 
      [,1] [,2] 
2012-01-01 5 15 
2012-01-02 10 20 

我想獲得:

[,1] [,2] 
2 4 
10 20 

列名在列表中的每個級別相同。

回答

2

除了@ Henrik的answer,你也可以使用的lapplydo.call組合,和last

do.call(rbind,lapply(b,last)) 
+0

這就是我一直在尋找的東西。謝謝。這並不重要,但是我得到了這個警告:'警告信息: In rbind(deparse.level,...): 不匹配的類型:將對象轉換爲數字' –

+1

@PLapointe:這是因爲你構造了'a'一個整數矩陣('1:4'是一個整數向量),但'a * 5'創建一個數字矩陣。 'b < - list(a * 1,a * 5)'會使警告消失。 –

+0

@PLapointe繼續從Joshua的解釋,如果你真的想要所有東西都是整數:'storage.mode(b [[2]])='整數'(使用'as.integer(a * 5)'是我的第一個猜測,但這是可怕的錯誤:-) –

1

由於b是一個列表,你可以使用任何*apply家庭成員,如:

vapply(b, "[", i = 2, rep(0,2)) 

如果b對象具有的行不同數量以下應該工作:

vapply(b, function(x) x[nrow(x),], rep(0,ncol(b[[1]]))) 

請注意,在第一個版本中,如果對象具有更多列,或者使用第二個示例中的構造,則必須修改rep(0,2)中的2

請注意,你必須使用t對結果獲得的格式,只要你想它:

t(vapply(b, "[", i = 2, rep(0,2))) 
+0

謝謝你的幫忙。 –

相關問題