【问题标题】:How to read in multiple .csv files, merge and create new column?如何读取多个 .csv 文件、合并和创建新列?
【发布时间】:2018-02-01 17:39:07
【问题描述】:

我希望从我桌面上的一个文件夹中读取多个 .csv 文件,将所有这些 .csv 文件合并到一个 data.frame 中,并创建一个包含每个文件名称的列。

我试过了:

my.path <- "C:/Users/JB/Desktop/RawFiles/"
filenames <- paste(my.path, list.files(path=my.path), sep="/")
my.df <- do.call(rbind, lapply(filenames, function(x) cbind(read.csv(x), name=strsplit(x,'\\.')[[1]][1])))

但是,my.dt$name 不包含 .csv 的文件名。相反,它包含文件的位置。例如,head(my.dt, 3) 产生:

 name
1 C:/Users/JB/Desktop/RawFiles//Analysis_01122016
2 C:/Users/JB/Desktop/RawFiles//Analysis_01122016
3 C:/Users/JB/Desktop/RawFiles//Analysis_01122016

我怎样才能编辑这个my.dt$name 只生成文件名?我的预期输出是:

name
    1 Analysis_01122016
    2 Analysis_01122016
    3 Analysis_01122016

谢谢!

【问题讨论】:

  • strplit. 期间分裂并占据第一部分。所以它所做的只是删除扩展名(或者更多,如果任何文件名中有句点)
  • 另外,您的sep = "/" 似乎添加了一个额外的斜线。

标签: r


【解决方案1】:

首先,您不需要为路径使用变量; list.filesfull.names = TRUE 参数将为您做到这一点。

如果你只想要文件名和扩展名,你可以使用:

basename("full/path/to/myfile.csv")

如果你也想删除扩展:

tools::file_path_sans_ext(basename("full/path/to/myfile.csv"))

所以你可以用你的代码做这样的事情:

filenames <- list.files(path = "C:/Users/JB/Desktop/RawFiles", full.names = TRUE)
my.df <- do.call(rbind,
                 lapply(filenames, function(x) 
                                   cbind(read.csv(x), 
                                   name = tools::file_path_sans_ext(basename(x)))))

但是使用plyr::ldplydata.table 等工具可以找到更简洁的解决方案,您可以通过正确的搜索在其他答案中找到示例。

【讨论】:

    【解决方案2】:

    您可以使用 strsplit() 在“/”上拆分文件路径,并获取结果向量的最后一个元素。

    files <- list.files("~/Dropbox/structure_simulations/str_in/k2",full.names = T)
    
    df <- lapply(files,function(e) {
      tmp <- read.csv(e)
      name <- unlist(strsplit(e,"/"))[length(unlist(strsplit(e,"/")))] 
      name <- unlist(strsplit(name,"\\."))[1]
      tmp$name <- name
      tmp
      })
    df <- do.call(rbind,df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 2020-03-28
      • 1970-01-01
      • 2017-03-06
      • 2022-01-06
      • 2013-07-05
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多