R rbind 不同数量的数据帧

R rbind varying number of data frames

我需要绑定不同数量的数据集(数据框)。 目前我有这个:

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 全部

我们可以在ls中指定pattern获取全局环境中创建的所有对象为字符串,然后使用mget获取对象中的值作为 list。从那里,要么使用 rbindlist from 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))

如果您正在通过 lapply() 创建 data.frames,您可以通过管道将结果列表从 dplyr:

传送到 rbind_all
library(dplyr)

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

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