水平组合数据帧而不使用公共列

时间:2015-11-22 05:51:29

标签: r dataframe

我有一个非常简单的问题,但我是R的新手。我有超过300个数据帧,如:

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)

我的目标是组合这些数据框并将它们并排打印。我无法使用函数列表merge,cbind的原因 是我不希望根据任何专栏组合作为参考。

        [DF][1]

现在,当我单独传递DF时,来自rowr包的cbind.fill()会完成这项工作。但是如何将列表传递给它呢? 当我执行cbind.fill(list)

时,它不起作用

搜索后我找到了merge_recurse(list),但它没有完成这项工作。 提前致谢

1 个答案:

答案 0 :(得分:1)

我们可以使用do.call

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

最好不要使用函数名称命名对象,即我们可以将其命名为&#39; lst&#39;而不是&#39; list&#39;。此外,对于多个对象,我们可以使用mget代替&#39; get&#39;

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))),]))