我有一个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,...吗?
我很乐意为你提供帮助!
我同意@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)