我有一个非常简单的问题,但我是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),但它没有完成这项工作。 提前致谢
答案 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))),]))