#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')