2011-10-14 116 views
3

我有一個再發問題 - 我很抱歉!關於使用plyr和ldply

假設我想要根據'id'和'year'列出棒球數據(來自plyr包)。有根據要麼創建列表之間的差異:

1. mylist1 <- dlply(baseball, .(id, year), identity) 

2. mylist2 <- dlply(baseball, .(id), dlply, .(year), identity) 
在列表中的組織方式

,但得到的列表返回到數據幀是工作的罰款與「mylist1 」。

mydf1 <- ldply(mylist1) 

但與 'mylist2'

mydf2 <- ldply(mylist2) 

這提供了以下錯誤信息:

Error in list_to_dataframe(res, attr(.data, "split_label")): Result must be all atomic, or all data frames 

我是一個新手,R,和此錯誤消息並沒有多大感覺到我。

我想根據方法2拆分我自己的數據幀,因爲我需要相當多的數據操作。我的問題是:我怎樣才能將這個列表合併到數據框中?是否有替代do.call(rbind, do.call(rbind,...

我非常感謝您的幫助!

+1

爲什麼你需要分析這樣的數據?我不認爲我曾經做過這樣的事情。也許這只是因爲在設計問題的解決方案時,我試圖避免獲得我無法再組裝的數據結構。我最喜歡的工作方式是儘可能堅持data.frames,即優先使用'ddply'。 – Andrie

+0

您可能是對的,但我使用的是氣象數據的小時累計數據。我爲每個電臺,合奏團隊成員,日期和預測時間分配了一個時間序列,每個時間序列我需要得到小時值 - 而不是累計值。 Sisse – Sisse

+0

這可以使用'ddply'。在不知道數據結構的情況下,雙重猜測有點困難,但我懷疑將所有數據合併爲一個大規模的'data.frame'並確保您擁有正確的索引應該可行。祝你好運,你的分析。 – Andrie

回答

5

我同意@Andrie這是一個奇怪的結構。但我認爲你有這樣做的特別原因。

由於用dlply創建mylist2需要兩次傳遞,因此需要兩次調用ldply才能重新組合。

mydf2 <- ldply(mylist2, ldply) 

這將恢復baseball(模數排序)

> class(mydf2) 
[1] "data.frame" 
> all(dim(mydf2) == dim(baseball)) 
[1] TRUE 
+0

非常感謝您的幫助! – Sisse