You need to enable JavaScript to run this app. 如何在目录层级可变场景下获取同名文件的所有路径以支持rbind操作
优惠活动
大模型
产品
解决方案
定价
更多

如何在目录层级可变场景下获取同名文件的所有路径以支持rbind操作

原生R(Base R)实现(无需安装第三方包)

直接用内置的list.files()递归遍历所有层级目录,不受文件夹结构差异影响,核心代码:

# 替换"你的根目录路径"为实际要扫描的顶层文件夹路径
file_paths <- list.files(
  path = "你的根目录路径",
  pattern = "^results\\.csv$", # 正则锚定完全匹配文件名,避免误匹配
  full.names = TRUE, # 返回完整存储路径,而非仅文件名
  recursive = TRUE, # 递归遍历所有子文件夹,适配任意层级深度的目录结构
  include.dirs = FALSE, # 排除同名文件夹,仅匹配普通文件
  ignore.case = FALSE # 需要兼容大小写(如Results.csv)可改为TRUE
)

参数说明:

  • pattern 中的^表示文件名开头,$表示文件名结尾,\\.转义了正则规则里的通配符.,确保不会匹配到如results1csv、old_results.csv这类不符合要求的文件
  • 要匹配其他文件名时,仅需修改pattern的正则内容即可,比如匹配所有csv文件可改为"\\.csv$"
第三方包实现(适合高频文件操作场景)

如果经常需要处理批量文件,推荐用fs包,语法更简洁,参数逻辑更直观:

# 首次使用先安装
install.packages("fs")
library(fs)

file_paths <- dir_ls(
  path = "你的根目录路径",
  regexp = "^results\\.csv$",
  type = "file", # 仅匹配文件,自动排除同名文件夹
  recurse = TRUE # 递归遍历所有子目录
)

dir_ls()默认返回完整存储路径,不需要额外设置参数。

后续对接rbind操作的配套代码

拿到所有匹配路径后,可以直接批量读取合并,根据文件量选择对应方案:

  • 轻量场景(文件数少)用原生函数即可:
merged_data <- do.call(rbind, lapply(file_paths, read.csv))
  • 大量文件场景推荐用data.table的高效函数,读取和合并速度远快于原生实现:
# 首次使用先安装
install.packages("data.table")
library(data.table)

# rbindlist自动适配不同文件的列结构,列名不一致时会自动填充NA,无需提前对齐
merged_data <- rbindlist(lapply(file_paths, fread))
常见注意点
  • 优先使用绝对路径(如"C:/项目/数据根目录"、"/home/user/项目/数据根目录"),避免相对路径受R工作目录变动影响
  • 匹配完成后可以直接运行print(file_paths)查看所有路径,验证是否漏扫或误匹配
  • 如果需要排除特定子目录的文件,可以在得到路径后用file_paths[!grepl("需要排除的子目录名", file_paths)]过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 22:45:00