我有一个数据框列表,我确信它们都包含至少一行(实际上,有些只包含一行,而另一些包含给定数量的行),并且它们都具有相同的列(名称和类型)。万一这很重要,我也确定行中的任何地方都没有 NA。
情况可以这样模拟:
#create one row
onerowdfr<-do.call(data.frame, c(list(), rnorm(100) , lapply(sample(letters[1:2], 100, replace=TRUE), function(x){factor(x, levels=letters[1:2])})))
colnames(onerowdfr)<-c(paste("cnt", 1:100, sep=""), paste("cat", 1:100, sep=""))
#reuse it in a list
someParts<-lapply(rbinom(200, 1, 14/200)*6+1, function(reps){onerowdfr[rep(1, reps),]})
我已经设置了(随机化的)参数,以便它们接近我的真实情况。
现在,我想将所有这些数据帧合并到一个数据帧中。我认为使用 rbind 可以解决问题,如下所示:
system.time(
result<-do.call(rbind, someParts)
)
现在,在我的系统上(不是特别慢),使用上面的设置,这是 system.time 的输出:
user system elapsed
5.61 0.00 5.62
rbind-ing 254(在我的情况下)行 200 个变量将近 6 秒?当然必须有一种方法来提高这里的性能?在我的代码中,我必须经常做类似的事情(它是多重插补的一个),所以我需要尽可能快。