импорт и преобразование многих файлов CSV

Я неэффективно импортирую и преобразую много файлов. Мне было интересно, может ли кто-нибудь показать мне более быстрый способ использования мурлыканья. Следующий код - это то, что я пробовал, и он должен дать вам общую картину:

data_2013 <- read_csv("data_2013") %>%
clean_names() %>% # using the janitor package
mutate(year = "2013")

data_2014 <- read_csv("data_2014") %>%
clean_names() %>%
mutate(year = "2014")

С увеличением года на 1 (вплоть до 2019 года). В конце концов я присоединяюсь ко всем этим файлам, так как ключевые переменные совпадают. Но очевидно, что импорт файлов неэффективен.

Любая помощь будет принята с благодарностью


person dano_    schedule 19.01.2020    source источник


Ответы (1)


Мы можем сделать это в цикле с map. Проведите цикл по именам файлов, прочтите с помощью read_csv, очистите имена и создайте столбец "год"

library(dplyr)
library(stringr)
library(purrr)
library(readr)
library(janitor)

files <- paste0("data_", 2013:2019, ".csv")
lst1 <-  files %>%
           map(~ read_csv(.x)) %>%
             clean_names() %>%
             mutate(year = str_extract(., "\\d{4}"))

Если выход list необходимо объединить в один фрейм данных

dat1 <- bind_rows(lst1, .id = 'grp')

В base R это можно сделать с помощью lapply

lst1 <- lapply(files, function(x) transform(read.csv(x), 
                year = sub("data_(\\d+)\\..*", "\\1", x)))
dat1 <- do.call(rbind, Map(cbind, lst, grp = seq_along(lst1)))
person akrun    schedule 19.01.2020