R语言新手求助:如何读取不同文件夹下的.csv文件并分类存储
读取新旧文件夹下的CSV文件并分别存储数据集
嗨,作为R新手能搞定单个文件夹的CSV读取已经很棒了!针对你要处理两个文件夹(新旧数据)的需求,我给你两种实用的代码方案,还有一些注意事项帮你避坑:
方法一:基础R实现(无需额外安装包)
基础R就能完成这个任务,核心是用list.files()获取所有CSV路径,再批量读取合并:
# 1. 定义新旧数据文件夹的路径(记得替换成你自己的实际路径!) old_data_dir <- "~/Documents/old_data_folder" new_data_dir <- "~/Documents/new_data_folder" # 2. 获取旧数据文件夹下所有CSV文件的完整路径 # pattern = "\\.csv$" 确保只匹配以.csv结尾的文件,full.names=TRUE返回完整路径 old_csv_files <- list.files(old_data_dir, pattern = "\\.csv$", full.names = TRUE) # 3. 批量读取所有旧CSV并合并成一个数据集 # lapply 逐个读取文件,返回数据框列表;do.call(rbind, ...) 将列表合并为单个数据框 old_dataset <- do.call(rbind, lapply(old_csv_files, function(file) { # 可以在这里添加读取参数,比如sep=",",header=TRUE等,根据你的CSV格式调整 read.csv(file, stringsAsFactors = FALSE) })) # 4. 对新数据文件夹重复同样的操作 new_csv_files <- list.files(new_data_dir, pattern = "\\.csv$", full.names = TRUE) new_dataset <- do.call(rbind, lapply(new_csv_files, function(file) { read.csv(file, stringsAsFactors = FALSE) }))
方法二:tidyverse工具链(更简洁高效)
如果你愿意安装并使用tidyverse包(推荐,处理数据更流畅),用purrr::map_dfr()可以一行完成读取合并:
# 先安装并加载tidyverse包(第一次用需要安装) # install.packages("tidyverse") library(tidyverse) # 定义文件夹路径 old_data_dir <- "~/Documents/old_data_folder" new_data_dir <- "~/Documents/new_data_folder" # 读取旧数据:list.files获取路径,map_dfr自动按行合并所有CSV old_dataset <- list.files(old_data_dir, pattern = "\\.csv$", full.names = TRUE) %>% map_dfr(read_csv, show_col_types = FALSE) # show_col_types=FALSE关闭列类型提示,更清爽 # 读取新数据 new_dataset <- list.files(new_data_dir, pattern = "\\.csv$", full.names = TRUE) %>% map_dfr(read_csv, show_col_types = FALSE)
重要注意事项
- 检查文件结构一致性:确保新旧文件夹里的所有CSV文件列名、列类型完全一致,否则合并时会报错或出现异常。如果有不一致的文件,可以先单独排查,或者在
read.csv/read_csv中指定col_types参数强制统一列类型。 - 大文件处理优化:如果你的CSV文件特别多或特别大,推荐用
vroom包替代read_csv,它读取速度更快且更节省内存:# install.packages("vroom") library(vroom) old_dataset <- vroom(list.files(old_data_dir, pattern = "\\.csv$", full.names = TRUE)) - 后续对比建议:合并好两个数据集后,你可以用
dplyr::anti_join(old_dataset, new_dataset)找出旧数据有但新数据没有的行,或者用dplyr::full_join()结合mutate()标记行的来源,方便对比差异。
内容的提问来源于stack exchange,提问作者Eglė Pugačiova
相关产品推荐
相关产品推荐

