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

请求协助修改代码:实现文件批量读取、添加文件名列等功能

嘿,我来帮你搞定这个批量处理的需求!你之前用mutate实现了单个文件添加文件名列,现在要批量处理文件夹里的所有文件,用tidyverse系列工具就能轻松完成,下面是具体的步骤和代码示例:

批量读取文件夹文件并添加文件名列

一、使用tidyverse方案(推荐)

这个方案用purrr做遍历,dplyr做数据处理,readr读取文件,代码简洁易读。

  1. 先加载所需的包:
library(tidyverse)
  1. 设置你的文件夹路径(记得替换成实际路径):
folder_path <- "你要读取的文件夹路径"
  1. 获取文件夹内所有目标文件的完整路径(这里以CSV文件为例,可根据需要修改文件后缀):
# pattern参数用来筛选文件类型,\\.csv$表示匹配所有以.csv结尾的文件
file_paths <- list.files(folder_path, pattern = "\\.csv$", full.names = TRUE)
  1. 批量读取并处理文件:
    • 如果想把所有文件合并成一个大的数据集:
    combined_data <- file_paths %>%
      map_dfr(function(file_path) {
        # 读取文件,如果是Excel文件可以换成readxl::read_excel()
        read_csv(file_path) %>%
          # 添加文件名列:先提取纯文件名(去掉路径和后缀),你也可以用basename(file_path)保留后缀
          mutate(filename = tools::file_path_sans_ext(basename(file_path)))
      })
    
    • 如果想保留每个文件的独立数据集(存成列表):
    data_list <- file_paths %>%
      map(function(file_path) {
        read_csv(file_path) %>%
          mutate(filename = tools::file_path_sans_ext(basename(file_path)))
      })
    # 给列表命名,方便后续调用每个文件的数据
    names(data_list) <- tools::file_path_sans_ext(basename(file_paths))
    

二、Base R方案(无需额外包)

如果你不想用tidyverse,也可以用Base R实现:

folder_path <- "你要读取的文件夹路径"
file_paths <- list.files(folder_path, pattern = "\\.csv$", full.names = TRUE)

# 批量读取并添加文件名列
data_list <- lapply(file_paths, function(file_path) {
  df <- read.csv(file_path)
  df$filename <- tools::file_path_sans_ext(basename(file_path))
  return(df)
})

# 合并成大数据集(可选)
combined_data <- do.call(rbind, data_list)

关键细节说明

  • list.files()的full.names = TRUE参数必须加上,这样才能拿到文件的完整路径,否则R找不到文件位置。
  • basename(file_path)用来从完整路径中提取文件名(比如从/Users/test/file1.csv得到file1.csv),tools::file_path_sans_ext()会去掉文件后缀,得到纯文件名file1。
  • 如果你的文件是Excel格式,把read_csv()换成readxl::read_excel()即可,记得先安装readxl包。

内容的提问来源于stack exchange,提问作者Hammao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:41:15