我有一个数据框df
和一个返回两个数据框列表的函数process
,a
以及b
. 我使用 dlply 拆分df
id 列,然后返回数据帧列表的列表。这是近似实际数据和方法的示例数据/代码:
df <- data.frame(id1=rep(c(1,2,3,4), each=2))
process <- function(df) {
a <- data.frame(d1=rnorm(1), d2=rnorm(1))
b <- data.frame(id1=df$id1, a=rnorm(nrow(df)), b=runif(nrow(df)))
list(a=a, b=b)
}
require(plyr)
output <- dlply(df, .(id1), process)
output
是数据框列表的列表,嵌套列表将始终有两个数据框,名为a
和b
。在这种情况下,外部列表的长度为 4。
我要生成的是一个包含所有数据帧的a
数据帧,以及一个id
指示它们各自值的列(我相信这作为属性留在列表中split_labels
,请参阅 str(输出))。然后对于数据帧也是b
如此。
到目前为止,我已经部分使用这个问题来提出这个代码:
list <- unlist(output, recursive = FALSE)
list.a <- lapply(1:4, function(x) {
list[[(2*x)-1]]
})
all.a <- rbind.fill(list.a)
这给了我最终的a
数据框(同样也b
有不同的下标 into list
),但是它没有我需要的 id 列,我很确定必须有一个更直接或更优雅的解决方案。理想情况下使用干净的东西plyr
。