2015-11-22 43 views
1

我有一个非常简单的问题,但我是新来的R.我有超过300 dataframes像这样的:R:水平相结合的数据帧不具有共同的列

DF1 <- data.frame(replicate(5,sample(1:10,5,rep=TRUE))) 
DF2 <- data.frame(replicate(5,sample(11:20,8,rep=TRUE))) 
DF3 <- data.frame(replicate(5,sample(21:30,3,rep=TRUE))) 

我打表了出来:

list <- lapply(paste0('DF',seq(1,3)), get) 

我的目标是将这些数据框合并在一起打印。我不能使用函数列表合并,cbind 的原因是我不希望根据任何列作为参考进行组合。

 [DF][1] 

现在,rowr软件包中的cbind.fill()会在我单独传递DF时执行这项工作。但是,我如何将清单传递给它? 当我做cbind.fill(列表)时,它不起作用

搜索后,我发现merge_recurse(列表),但它没有做的工作。 在此先感谢

回答

0

我们可以使用do.call

library(rowr) 
res1 <- do.call(cbind.fill, lst) 
identical(res1, cbind.fill(DF1, DF2, DF3)) 
#[1] TRUE 

最好不要说出与功能名称的对象,即我们可以将其命名为“乐善堂”而不是“名单”。此外,多个对象,我们可以使用mget,而不是“得到”

lst <- mget(paste0('DF', 1:3)) 

这也可以没有任何包装完成。我们可以通过list数据集中的最大行复制行,然后cbind

do.call(cbind, lapply(lst, function(x) x[rep(1:nrow(x), 
        length.out= max(sapply(lst, nrow))),]))