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 的中间步骤。
我需要绑定不同数量的数据集(数据框)。 目前我有这个:
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 的中间步骤。