2009-10-30 30 views
18

我有一個如下所示的列表清單:x[[state]][[year]]。每個元素都是一個數據框,並且單獨訪問它們不是問題。rbind列表中的數據幀

但是,我想要跨多個列表綁定數據幀。更具體地說,我希望擁有與我有多年的數據幀一樣多的輸出,即每年都要綁定所有狀態數據幀。換句話說,我想將我所有的狀態數據逐年整合到單獨的數據框中。

我知道我可以將單個列表合併到一個數據框中,其中包含do.call("rbind",list)。但我不知道如何在列表清單上做到這一點。

+2

出於好奇,爲什麼你處理數據這種方式,而不是僅僅具有所有數據的一個大的數據幀? –

回答

6

你可以沿着以下行的東西(我無法測試,因爲我沒有這樣的結構):

extract.year <- function(my.year) lapply(x, function(y) y[[my.year]]) 

x.by.year <- sapply(my.list.of.years, function(my.year) 
    do.call(rbind, extract.year(my.year))) 

函數摘錄年創建只包含給定年份的dataframes列表。然後你rbind他們...

+2

事情變得越來越複雜,所以我嘗試了你的方法,它的工作!稍作修改。第一行返回了我正在查找的數據框。第二行不起作用,所以我轉向了哈德利的plyr軟件包。此命令在您的第一行後返回完整的數據幀清單: llply(my.list.of.years,function(my.year)do.call(rbind,extract.year(my.year))) 太棒了,謝謝你們的幫助! – bshor

+1

ldply()更快,更高效! – bshor

32

摺疊成一個列表第一:

list <- unlist(listoflists, recursive = FALSE) 
df <- do.call("rbind", list) 
+0

感謝您的及時幫助!但這不完全是我想要的。你的回答給了我列表中所有數據幀的單一數據幀(使用unlist,一個我從來不知道的酷炫命令)。但是,我想要一份32頁的數據框架列表,這些框架和我一樣多年,將所有州合併在一起。 你的答案的第一行給我一個大約州*年的長度列表(儘管由於某種原因,我得到的長度= 1584,而不是32 * 50 = 1600,如我所料)。所以我認爲這是一個線索... – bshor

+0

經過一些更多的實驗後,我想我正在某個地方。我首次列出了州列表的元素,所以現在列表中的元素(哈德利的第一個命令之後)現在具有有用的名稱,如「AL3」和「TX4」。現在我必須將所有3個結合在一起,所有4個結合在一起,等等。 – bshor

+0

哦,男孩,我猜正則表達式是答案的一部分。我嘗試了grep(「1 $」,names(list))來獲取以「1」命名的列表,但這些列表讓我在這些列表中以1,21,21,31等多年。我嘗試了grep( 「\ D1 $」,名稱(列表)),但沒有去。 – bshor