首页 文章

在保持身份的同时组合多个文件

提问于
浏览
2

跟进上一个问题; 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

有没有办法做到这一点?

3 回答

  • 2

    基于你以前的帖子,我建议这样的事情

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

    好吧,我已经弄清楚了 . 以下代码获取文件夹中的所有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)
    
  • 2

    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)]))
    

相关问题