R rbind不同数量的数据帧

时间:2016-03-17 07:53:33

标签: r rbind

我需要研究不同数量的数据集(数据帧)。 目前我有这个:

dom.ready.dat <- rbind(dom.ready.dat.bad1,
                       dom.ready.dat.bad2,
                       dom.ready.dat.bad3,
                       dom.ready.dat.bad4,
                       dom.ready.dat.bad5,
                       dom.ready.dat.bad6,
                       dom.ready.dat.bad7,
                       dom.ready.dat.bad8,
                       dom.ready.dat.bad9,
                       dom.ready.dat.bad10,
                       dom.ready.dat.good1,
                       dom.ready.dat.good2,
                       dom.ready.dat.good3,
                       dom.ready.dat.good4,
                       dom.ready.dat.good5,
                       dom.ready.dat.good6,
                       dom.ready.dat.good7,
                       dom.ready.dat.good8,
                       dom.ready.dat.good9,
                       dom.ready.dat.good10)

但是,我可能有10个以上的数据帧,所以我需要引用模式dom.ready.dat *动态地将后缀动态地添加到R中的某个函数中,该函数获取不同数量的参数并分配像rbind这样的函数所有这些

2 个答案:

答案 0 :(得分:1)

如果您要通过lapply()创建data.frames,则可以将结果列表从rbind_all传送到dplyr

library(dplyr)

lapply(1:20, function(i){
  read.csv(sprintf("some_file%s.csv", i))
}) %>%
   rbind_all

这样,如果您只对组合感兴趣,则不会有20个不同data.frames的中间步骤。

答案 1 :(得分:0)

我们可以在pattern中指定ls以将在全局环境中创建的所有对象作为字符串,然后使用mget将对象中的值作为list。从那里开始,使用rbindlist

中的data.table
library(data.table)
rbindlist(mget(ls(pattern="^dom.ready.dat")))

或使用rbind

do.call(rbind, mget(ls(pattern="^dom.ready.dat")))

更好的选择是读取list中的所有文件,然后读取rbind而不是创建大量对象。

files <- list.files(pattern="somepattern.csv", full.names=TRUE)

library(data.table)
rbindlist(lapply(files, fread))