在R语言中如何读取不同目录下的多张同名数据表?
完全可以通过list.files()和lapply()的组合实现该需求,仅用R基础函数即可完成,无需安装额外扩展包。
具体操作步骤
步骤1:获取所有quant.txt的完整路径
用list.files()遍历父目录下的所有子文件夹,匹配目标文件:
# 先设置工作目录为所有子文件夹所在的父目录,也可直接在path参数填写父目录的绝对路径 setwd("替换为你的父目录实际路径") # 匹配所有子文件夹下的quant.txt,返回完整文件路径 file_paths <- list.files( path = ".", # 当前工作目录即目标父目录 pattern = "quant\\.txt$", # 精确匹配文件名,$限定文件名必须以quant.txt结尾 recursive = TRUE, # 开启子目录递归遍历 full.names = TRUE # 返回完整路径,否则仅返回文件名无法正常读取 )
可以先打印
file_paths检查路径是否正确,确认12个目标文件都被匹配到再进行下一步。
步骤2:批量读取所有文件
用lapply()遍历路径列表,逐个读取文件,最终返回一个列表,每个元素对应一个quant.txt的内容:
# 按实际文件格式选择读取函数、调整参数,以下为通用示例 # 示例默认文件带表头、制表符分隔,可根据你的实际情况修改sep、header等参数 quant_list <- lapply(file_paths, function(x) { read.table(x, header = TRUE, sep = "\t", stringsAsFactors = FALSE) }) # 可选操作:给列表元素命名,标记每个数据对应的来源子文件夹 names(quant_list) <- basename(dirname(file_paths))
可选操作:合并所有数据为一个总数据框
如果12个文件的列结构完全一致,需要合并后统一分析,可以用以下代码:
# base R 原生方法 total_quant <- do.call(rbind, quant_list) # 也可使用dplyr包的bind_rows,兼容性更强 # library(dplyr) # total_quant <- bind_rows(quant_list, .id = "source_folder") # .id参数可新增一列标记数据来源的子文件夹名称
常见注意事项
- 读取报错时优先校验分隔符、表头、文件编码等参数,可先用单个文件测试读取参数,确认无误后再批量执行
- 若12个文件的列结构不一致,建议保留列表格式,单独处理每个文件的内容
内容的提问来源于stack exchange,提问作者Helena
相关产品推荐
相关产品推荐

