我正在处理数据框列表,如下所示:
results <- list()
for( i in 1:4 ) {
runData <- data.frame(id=i, t=1:10, value=runif(10))
runResult <- data.frame( id=i, avgValue=mean(runData$value))
results <- c(results,list(list(runResult,runData)))
}
数据看起来是这样的,其实质上是我的实际数据是如何通过使用R 2.14.0中的新并行包通过clusterApply运行模拟生成的,其中每个模拟返回一些汇总结果的列表(runResult) )和原始数据(runData)
我想将第二级列表的第一个数据帧组合在一起(它们是相同的结构),同样也是第二级列表的第二个数据帧。这question似乎是答案,但所有数据框都具有相同的结构。
到目前为止,我发现的最好方法是使用unlist
将其作为数据帧列表,其中奇数索引和偶数索引表示需要组合的数据帧:
results <- unlist(results,recursive=FALSE)
allRunResults <- do.call("rbind", results[seq(1,length(results),2)])
allRunData <- do.call("rbind", results[seq(2,length(results),2)])
我确信有更好的方法可以做到这一点,我还没有看到它。任何人都可以提供一个吗?
答案 0 :(得分:5)
从Ben Bolker对this question的出色回答中无耻地窃取构造......
Reduce(function(x,y) mapply("rbind", x,y), results)
[[1]]
id avgValue
1 1 0.3443166
2 2 0.6056410
3 3 0.6765076
4 4 0.4942554
[[2]]
id t value
1 1 1 0.11891086
2 1 2 0.17757710
3 1 3 0.25789284
4 1 4 0.26766182
5 1 5 0.83790204
6 1 6 0.99916116
7 1 7 0.40794841
8 1 8 0.19490817
9 1 9 0.16238479
10 1 10 0.01881849
11 2 1 0.62178443
12 2 2 0.49214165
........
........
........
答案 1 :(得分:0)
一个选项是从列表的每个部分中提取给定数据框,然后rbind
将它们组合在一起:
runData <- do.call(rbind, lapply(results, '[[', 2))
runResult <- do.call(rbind, lapply(results, '[[', 1))
此示例提供了2个数据框,但如果需要,您可以将它们重新组合到一个列表中。