【问题标题】:r looping through folders and searching for file and then concatenate datar 遍历文件夹并搜索文件然后连接数据
【发布时间】:2017-09-16 08:49:30
【问题描述】:

我有一个基本文件夹,里面有很多文件夹。我想去每个文件夹,找到一个名为 table_amzn.csv 的文件(如果存在),然后在 R 中读取所有这些文件,并将所有文件一个接一个地放在一个数据框中。我已经验证所有文件都有相同的列。我知道如何将 CSV 读入 R。但是我如何遍历基本文件夹中的所有文件夹并连接数据

【问题讨论】:

  • 使用list.files()获取具有指定模式的文件名列表;使用read.csv 应用列表以将所有数据框读入单个列表;使用do.call("rbind", list) rbind 数据
  • list.files(pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE) 应该爬上所有文件夹并搜索特定文件名。结果应该是文件的完整路径。

标签: r csv find concatenation


【解决方案1】:

这在基础 R 中也很简单:

## change `dir` to whatever your 'base folder' actually is
dir <- '~/base_folder'
ff <- list.files(dir, pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE)

out <- do.call(rbind, lapply(ff, read.csv))

如果您的列相同但出于某种原因(错字等)具有不同的列名,您可以修改上述内容,如下所示:

out <- do.call(rbind, lapply(ff, read.csv, header = FALSE, skip = 1))
names(out) <- c('stub1', 'stub2') # whatever they should be

【讨论】:

    【解决方案2】:

    这是最近添加到包rio中的一个实现:

    files <- list.files(pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE)
    
    devtools::install_github("leeper/rio")
    library(rio)
    df <- import_list(files, rbind = TRUE)
    

    这会将files 中的所有对象加载到单个data.frame 对象中。或者,如果您使用rbind = FALSE 调用,则会返回一个 data.frames 列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多