R итерация по файлам из другого каталога

#r #tidyverse #purrr

#r #tidyverse #муррр

Вопрос:

У меня есть данные в разных папках, которые мне нужно импортировать и преобразовать в цикле с помощью 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.

Ответ №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')