【问题标题】:R rbind varying number of data frames [duplicate]R rbind 不同数量的数据帧[重复]
【发布时间】:2016-03-17 17:59:02
【问题描述】:

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

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

【问题讨论】:

    标签: r rbind


    【解决方案1】:

    如果您通过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 的中间步骤。

    【讨论】:

      【解决方案2】:

      我们可以在ls中指定pattern来获取全局环境中创建的所有对象作为字符串,然后使用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))
      

      【讨论】:

        猜你喜欢
        • 2019-11-05
        • 1970-01-01
        • 2012-10-13
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 2022-10-02
        • 2017-08-06
        • 1970-01-01
        相关资源
        最近更新 更多