我正在处理数据帧列表,如下所示:
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)))
}
Run Code Online (Sandbox Code Playgroud)
数据看起来这样的原因主要在于如何使用R 2.14.0中的新并行软件包通过clusterApply运行模拟生成实际数据,其中每个模拟返回一些汇总结果(runResult)和原始数据的列表( runData)
我想将第二级列表的第一个数据帧组合在一起(它们是相同的结构),同样也是第二级列表的第二个数据帧.这个问题似乎就是答案,但所有数据框架都具有相同的结构.
到目前为止我发现的最好的方法是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)])
Run Code Online (Sandbox Code Playgroud)
我确定有更好的方法来做到这一点,我还没有看到它.谁能供应一个?
从Ben Bolker对这个问题的出色回答中无耻地窃取了一个构造......
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
........
........
........
Run Code Online (Sandbox Code Playgroud)