【问题标题】:Combining multiple files while maintaining their identities合并多个文件,同时保持其身份
【发布时间】:2014-10-25 05:28:16
【问题描述】:

跟进上一个问题; consolidating data frames in R 使用 lapply 可以完美地读取和合并多个 csv 文件。

我的问题是,假设您还想根据正在读取的文件名创建并附加一个标识符到此合并数据集。

例如,如果您有 2 个数据集并且它们是;

文件 2014_1.csv;

Var1 Var2
21   140 
2    134 
3    135 

文件 2014_2.csv;

Var1 Var2
21   131 
2    134 

我希望我的决赛桌看起来像这样;

Var1 Var2 Period
21   140  2014_1
2    134  2014_1
3    135  2014_1
21   131  2014_2
2    134  2014_2

有没有办法做到这一点?

【问题讨论】:

    标签: r csv merge


    【解决方案1】:

    使用data.table 中的fread(这样会更快)

     files <- list.files(pattern="\\d{4}_\\d.csv")
     library(data.table)
     library(tools)
    
    
      rbindlist(
         lapply(files, function(x) cbind(fread(x), Period=file_path_sans_ext(x)) ))
      #   Var1 Var2  Period
      #1:   21  140  2014_1
      #2:    2  134  2014_1
      #3:    3  135  2014_1
      #4:   21  131  2014_2
      #5:    2  134  2014_2
    

    或者按照@Arun 的建议

     rbindlist(lapply(files, function(x) fread(x)[,Period:=file_path_sans_ext(x)]))
    

    【讨论】:

    • 我会使用:= 添加Period 而不是cbind
    • @Arun 谢谢你的建议。
    【解决方案2】:

    好的,我想通了。 以下代码获取文件夹中的所有 csv 文件,将文件名作为 id 变量附加并组合它们。

    files <- list.files()
    files
    # read the files into a list of data.frames
    data.list <- lapply(files, function(.file){
         dat<-read.csv(.file, header = F)
       dat$period<-as.character(.file)
    dat
    })
    # concatenate into one big data.frame
    data.cat <- do.call(rbind, data.list)
    

    【讨论】:

      【解决方案3】:

      根据你之前的帖子,我会建议这样的事情

      data.list <- cbind(lapply(files, read.csv), files)
      

      【讨论】:

      • 在每个列中添加一个额外的列,其中包含 cbind 之前的句点。即file1$Period &lt;- "2014_1" 和其他文件相同。
      • 感谢您回复 JeremyS。不幸的是,我在每个文件夹中有超过 30 个文件,所以我正在寻找一种更快的方法来做到这一点。另外,至于ben au的回复,我不知道会怎样。
      • 这篇带有 JeremyS stackoverflow.com/questions/21107006/… 答案的帖子向您展示了如何做您需要的事情
      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多