You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:02:00