使用具有不同维度的数据框列表

min*_*nda 3 r list dataframe

我正在处理数据帧列表,如下所示:

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)

我确定有更好的方法来做到这一点,我还没有看到它.谁能供应一个?

Jos*_*ien 5

从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)