我有一个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,...
?
我很乐意帮助你!
答案 0 :(得分:5)
我同意@Andrie这是一个奇怪的结构。但我认为你有这样做的特殊原因。
由于dlply
需要两次传递来创建mylist2
,因此需要对ldply
进行两次调用才能将其重新组合在一起。
mydf2 <- ldply(mylist2, ldply)
这将恢复baseball
(模数排序)
> class(mydf2)
[1] "data.frame"
> all(dim(mydf2) == dim(baseball))
[1] TRUE