在R语言中如何从URL批量下载并以不同名称保存多个.csv文件
批量读取CSV文件到R环境的高效方法
嘿,我太懂你手动逐行敲read.csv的痛苦了——重复代码不仅繁琐,还容易手滑打错年份。针对你这些命名规律极强的数据集,咱们用批量处理就能轻松搞定,下面分享两种实用方案:
方法1:基础R原生实现(无需额外包)
靠R自带的向量和列表操作就能完成,步骤清晰明了:
- 先生成年份、对应URL和要保存的对象名:
# 定义年份范围 years <- 2005:2014 # 批量构造所有文件的URL urls <- paste0("https://tfl.gov.uk/cdn/static/cms/documents/", years, "-gla-data-extract-casualty.csv") # 构造每个数据框的名称(比如casualty_2005) obj_names <- paste0("casualty_", years)
- 批量读取所有CSV到一个列表:
# 用lapply循环读取每个URL data_list <- lapply(urls, read.csv, header = TRUE)
- 给列表元素命名并导出到全局环境:
# 给列表的每个元素匹配对应的对象名 names(data_list) <- obj_names # 将列表中的数据框逐一导出为全局环境里的独立对象 list2env(data_list, envir = .GlobalEnv)
运行完这段代码,你就能在R环境里看到casualty_2005到casualty_2014所有数据框,和手动逐行读取的效果完全一致,但代码简洁不止一点点!
方法2:tidyverse风格(用purrr包)
如果你平时习惯用tidyverse工具链,用purrr的map函数会更优雅流畅:
先确保安装并加载purrr包:
install.packages("purrr") library(purrr)
然后可以用管道流一步完成所有操作:
years <- 2005:2014 urls <- paste0("https://tfl.gov.uk/cdn/static/cms/documents/", years, "-gla-data-extract-casualty.csv") obj_names <- paste0("casualty_", years) # 读取数据→命名列表元素→导出到环境 urls %>% map(read.csv, header = TRUE) %>% set_names(obj_names) %>% list2env(envir = .GlobalEnv)
额外小技巧:合并成单个数据框
如果之后需要把年度数据整合到一起分析,可以在读取时直接添加年份列,一步生成合并表:
library(dplyr) library(tidyr) combined_data <- tibble(year = years, url = urls) %>% mutate(data = map(url, read.csv, header = TRUE)) %>% unnest(data)
这样combined_data就是包含所有年份数据的单个数据框,还自带year列方便后续分组统计!
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

