импорт и преобразование многих CSV-файлов - PullRequest
1 голос
/ 20 января 2020

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

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 года). В конце концов я присоединяюсь ко всем этим файлам, поскольку ключевые переменные одинаковы. Но очевидно, что импорт файлов неэффективен.

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

1 Ответ

4 голосов
/ 20 января 2020

Мы можем сделать это в al oop с map. L oop в именах файлов, прочитайте read_csv, очистите имена и создайте столбец 'year'

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)))
...