我有一个数据框列表,我确定它们都至少包含一行数据(事实上,有些只包含一行数据,而其他一些包含给定数量的行数据),并且它们都具有相同的列(名称和类型)。如果有影响的话,我还确定在行中没有任何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)
)
现在,在我的系统上(这并不特别慢),并且使用上述设置,这是系统时间输出的结果:
user system elapsed
5.61 0.00 5.62
将254(在我的情况下)行的200个变量进行rbind,需要近6秒钟?肯定有一种方法可以提高这里的性能吧?在我的代码中,我经常需要做类似的事情(它是多重插补的一种形式),所以我需要尽可能快地完成。