0
我有一个数据帧,df
和函数process
,返回两个数据帧的列表,a
和b
。我使用dlply将id列上的df
分开,然后返回数据框列表的列表。下面是样本数据/代码近似于实际的数据和方法:rbinding基于嵌套顺序的数据帧列表
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
是dataframes的名单列表,嵌套列表总会有两个dataframes,命名为a
和b
。在这种情况下,外部列表的长度为4
什么我期待产生与所有a
dataframes一个数据帧,与id
列指示各自的值(我相信这是在列表中左边沿split_labels
属性,请参阅str(输出))。然后类似地对于b
数据帧。
到目前为止,我已经在部分使用这个question想出这样的代码:
list <- unlist(output, recursive = FALSE)
list.a <- lapply(1:4, function(x) {
list[[(2*x)-1]]
})
all.a <- rbind.fill(list.a)
这给了我最后的a
数据框(且同样b
用不同的标为list
),但是它不没有我需要的id列,我非常肯定,必须有一个更直接或优雅的解决方案。理想情况下使用plyr
清理干净。
我不明白这是什么意思'all.a'“没有我需要的id列”。如果你需要的id列与'output [[i]] $ b'中的id列是相同的'id1',那么你不能将它添加到你的'process'函数吗? – 2012-08-13 16:23:42