导入和转换许多 csv 文件

dan*_*no_ 2 r readr purrr tidyverse

我正在以一种低效的方式导入和转换许多文件。我想知道是否有人可以向我展示使用 purr 的更快方法。以下代码是我尝试过的,它应该为您提供一般模式:

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")
Run Code Online (Sandbox Code Playgroud)

随着年数增加 1(一直到 2019 年)。我最终加入了所有这些文件,因为关键变量是相同的。但显然文件的导入效率低下。

任何帮助将不胜感激

akr*_*run 5

我们可以在循环中使用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}"))
Run Code Online (Sandbox Code Playgroud)

如果list输出需要合并到单个数据帧中

dat1 <- bind_rows(lst1, .id = 'grp')
Run Code Online (Sandbox Code Playgroud)

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)))
Run Code Online (Sandbox Code Playgroud)