2011-09-22 50 views
1

我是R的新手,並且有一個連接問題,我無法解決。使用不同數量的元素連接嵌套列表

我有以下形式的巨大的數據幀:

station POSIX date.str forec.time lead.time mean.ens obs

6019 2011-08-06 06:00 20110806 00 006 45 67

6019 2011-08-06 07:00 20110806 00 007 69 72

6031 2011-08-06 12:00 20110806 06 006 87 95

6031 2011-08-06 13:00 20110806 06 007 88 97

我用「層」來分割數據幀像這樣

mydata.split <- dlply(mydataframe, .(datestr), dlply, .(forec.time), dlply, .(lead.time), identity, .drop = FALSE)

我做了一些計算與數據,這需要數據拆分這種方式。我把這個新名單稱爲mynewlist af計算。我想連接這些數據,但由於列表元素的數量不同,我遇到了問題。

> length(mynewlist[[1]][[1]])

[1] 34

> length(mynewlist[[1]][[2]])

[1] 38

我曾嘗試使用do.call(rbind, do.call(rbind, do.call(rbind, mynewlist)))來連接列表爲數據幀,但我得到了以下信息:

In function (..., deparse.level = 1) : number of columns of result is not a multiple of vector length (arg 1)

有沒有一種連接嵌套列表與不同數量的元素的方法?

我很重要的幫助或一個方向上的一個點。 Regard Sisse

+1

不確定你確定你是如何連接這些的;每個列表將成爲新數據框中的一行,但由於它們的長度不同,每個列表都會貢獻不同數量的列?如果是這樣,那麼額外的列應該是什麼?如果是這種情況,空白欄應該是'NA',那麼可以用'rbind.fill'代替'rbind' –

+0

另外,如果他們的新項目代表新行,那麼這些行上的未填充列會有什麼內容?你可以盲目填寫NA或回收物品,但是你想要嗎? 'data.frame'類的項目是矩形的,'list'項目不是。如果它不是矩形的,那麼你不能真正把它變成一個合適的'data.frame'。 – John

回答

1

只需使用ldply即可將所有這些列表重新拼接在一起。

隨着plyrbaseball數據,使用dlply作爲你的問題吐數據:

library(plyr) 
x <- dlply(baseball, .(year), transform, mean_rbi = mean(rbi)) 

現在使用ldply的名單組合成一個data.frame

y <- ldply(x) 

結果:

str(y) 
'data.frame': 21699 obs. of 23 variables: 
$ id  : chr "ansonca01" "forceda01" "mathebo01" "startjo01" ... 
$ year : int 1871 1871 1871 1871 1871 1871 1871 1872 1872 1872 ... 
$ stint : int 1 1 1 1 1 1 1 1 1 1 ... 
$ team : chr "RC1" "WS3" "FW1" "NY2" ... 
$ lg  : chr "" "" "" "" ... 
$ g  : int 25 32 19 33 29 29 29 46 37 25 ... 
... 
$ rbi  : int 16 29 10 34 23 21 23 50 15 16 ... 
... 
$ gidp : int NA NA NA NA NA NA NA NA NA NA ... 
$ mean_rbi: num 22.3 22.3 22.3 22.3 22.3 ... 
+0

感謝您的幫助!然而,「ldply(mynewlist)」給出了「list_to_dataframe(res,attr(.data,」split_labels「)中的錯誤): 結果必須是全部原子的,或者所有數據幀」我擔心,我沒有想法,這是什麼意思。我可以使用棒球數據集正常工作。問候Sisse –

+0

在這種情況下,您可能會添加或刪除某些部分的列,但不是全部。如果你在你的代碼中解決了這個問題,請再次嘗試'ldply'。 – Andrie

相關問題