使用plyr和ldply

Sis*_*sse 3 r plyr

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

假设我想根据'id'和'year'列出棒球数据(来自plyr包).根据以下任一方法创建列表之间存在差异:

1. mylist1 <- dlply(baseball, .(id, year), identity)
Run Code Online (Sandbox Code Playgroud)

2. mylist2 <- dlply(baseball, .(id), dlply, .(year), identity)
Run Code Online (Sandbox Code Playgroud)

在列表的组织方式,但将列表重新放回数据框与'mylist1'工作正常.

mydf1 <- ldply(mylist1)
Run Code Online (Sandbox Code Playgroud)

但不是'mylist2'

mydf2 <- ldply(mylist2)
Run Code Online (Sandbox Code Playgroud)

它给出以下错误消息:

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

我是R的新手,这个错误信息对我来说没什么意义.

我想根据方法2分割我自己的数据帧,因为我需要相当多的数据操作.我的问题是:如何将此列表合并到数据框中?有替代品do.call(rbind, do.call(rbind,...吗?

我很乐意为你提供帮助!

Bri*_*ggs 5

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

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

mydf2 <- ldply(mylist2, ldply)
Run Code Online (Sandbox Code Playgroud)

这恢复baseball(模数排序)

> class(mydf2)
[1] "data.frame"
> all(dim(mydf2) == dim(baseball))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)