如何在R中批量导入EPA网站CSV文件并自动命名DataFrame?
在R中批量导入EPA的CSV文件并自动命名数据框
首先需要处理文件名中月份格式不一致的问题(例如jun对应文件名里的june,sep对应sept),我们可以先建立月份缩写与文件名中对应字符串的映射表,再通过循环或purrr工具批量处理:
方法一:使用tidyverse的purrr工具(推荐)
library(tidyverse) # 建立月份缩写与文件名中月份字符串的映射 month_mapping <- tibble( month_abbr = c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"), filename_month = c("jan", "feb", "mar", "apr", "may", "june", "july", "aug", "sept", "oct", "nov", "dec") ) target_year <- 2013 base_url <- "https://www.epa.gov/sites/default/files/2017-10/rindata_%s%d.csv" # 批量导入、处理并命名数据框 month_mapping %>% pwalk(function(month_abbr, filename_month) { # 构造目标文件URL file_url <- sprintf(base_url, filename_month, target_year) # 读取数据并添加month、year列 df <- read.csv(file_url) %>% add_column(month = month_abbr, year = target_year) # 将数据框以指定名称存入全局环境(如jan_13) assign(paste0(month_abbr, "_", substr(target_year, 3, 4)), df, envir = .GlobalEnv) })
方法二:使用基础for循环
如果更习惯基础循环写法,也可以用以下代码:
library(tidyverse) month_mapping <- tibble( month_abbr = c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"), filename_month = c("jan", "feb", "mar", "apr", "may", "june", "july", "aug", "sept", "oct", "nov", "dec") ) target_year <- 2013 base_url <- "https://www.epa.gov/sites/default/files/2017-10/rindata_%s%d.csv" for (i in 1:nrow(month_mapping)) { month_abbr <- month_mapping$month_abbr[i] filename_month <- month_mapping$filename_month[i] # 构造URL file_url <- sprintf(base_url, filename_month, target_year) # 读取并处理数据 df <- read.csv(file_url) %>% add_column(month = month_abbr, year = target_year) # 命名并存入全局环境 assign(paste0(month_abbr, "_", substr(target_year, 3, 4)), df, envir = .GlobalEnv) }
关键说明
month_mapping解决了文件名中月份格式不统一的问题,确保每个月份的URL都能正确构造sprintf用于快速拼接URL,比paste更适合处理带格式的字符串组合assign函数将处理好的数据框按[月份缩写]_[年份后两位]的规则命名(如jan_13),存入全局环境,和手动导入的命名规则完全一致- 如果需要处理多个年份,只需将
target_year改为年份向量(如2013:2015),再扩展映射表或嵌套循环即可
内容的提问来源于stack exchange,提问作者ocwa80
相关产品推荐
相关产品推荐

