【问题标题】:R iteration over files from different directoryR迭代来自不同目录的文件
【发布时间】:2021-03-30 07:17:20
【问题描述】:

我在不同的文件夹中有一个数据,我需要使用 purr 在循环中导入和转换。 csv 文件的路径和名称遵循以下模式:

data/csd-alberta/
data/csd-ontario/
data/csd-pei/
data/csd-bc/

# for all of the province

c(alberta, bc, newbruns, newfoundland, nova, nunavut, nw, ont, pei, qc, sask, yukon)

每个省文件夹里面有很多csv文件,但是我要导入的主数据集是98开头的。例如:

# note that all data sets must begin with 98 and end with .csv. 

csd_alberta_raw <- read_csv("csd-alberta/98-1.csv")
csd_bc_raw <- read_csv("csd-bc/98-2.csv")
csd_ont_raw <- read_csv("csd-ont/98-3.csv")

文件夹里还有其他csv文件,我只需要导入98开头的就行了

我想使用 purr 和 map_df 来集成所有文件的数据转换,因为它们都有相同的列并且需要相同的数据清理。但我不确定如何对所有目录执行此操作,并指定 csv 的模式。

【问题讨论】:

    标签: r tidyverse purrr


    【解决方案1】:

    您可以使用以下内容:

    • 使用list.files 获取具有特定模式的所有文件夹中文件名的完整路径 ('^98.*\\.csv$')。
    • 使用map_df 读取所有文件并合并它们。我还添加了一个名为 file 的新列,它将标识数据来自哪个文件。
    filenames <- list.files('data/', recursive = TRUE, full.names = TRUE, pattern = '^98.*\\.csv$')
    combine_data <- purrr::map_df(filenames, readr::read_csv, .id = 'file')
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多