我正在以低效的方式导入和转换许多文件。我想知道是否有人可以向我展示使用 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")
年份增加 1(一直到 2019 年)。我最终加入了所有这些文件,因为关键变量是相同的。但显然文件的导入效率很低。
任何帮助将不胜感激
最佳答案
我们可以使用 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)))
关于r - 导入和转换许多 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815020/