使用plyr和ldply

时间:2011-10-14 16:19:03

标签: r plyr

我有一个reoccuring问题 - 我道歉!

假设我想根据'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 个答案:

答案 0 :(得分:5)

我同意@Andrie这是一个奇怪的结构。但我认为你有这样做的特殊原因。

由于dlply需要两次传递来创建mylist2,因此需要对ldply进行两次调用才能将其重新组合在一起。

mydf2 <- ldply(mylist2, ldply)

这将恢复baseball(模数排序)

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