R语言如何批量循环合并两个不同目录下多文件的指定列?
R语言批量合并双目录同名文件指定列实现
实现逻辑
- 提前配置三个路径:目录A路径、目录B路径、结果输出路径,自动创建不存在的输出目录,避免覆盖原始数据
- 自动生成
File_1到File_100的完整文件名列表,无需手动枚举 - 循环遍历每个文件名,分别读取两个目录下的对应文件
- 支持两种合并方式:行顺序完全一致时直接列绑定;不确定行顺序时按Position列精准匹配,避免数据错位
- 合并后统一按规则输出到结果目录
可直接运行的代码
# -------------------------- 请先修改这里的路径为你本地的实际路径 -------------------------- path_dirA <- "D:/your_data/dirA" # 目录A的绝对路径 path_dirB <- "D:/your_data/dirB" # 目录B的绝对路径 path_out <- "D:/your_data/merged" # 合并结果的存放目录 # ---------------------------------------------------------------------------------------- # 输出目录不存在则自动创建 if (!dir.exists(path_out)) { dir.create(path_out, recursive = TRUE) } # 生成所有待处理文件名 all_files <- paste0("File_", 1:100) # 批量循环处理 for (single_file in all_files) { # 读取两个目录下的同名文件 data_A <- read.table(file.path(path_dirA, single_file), header = TRUE) data_B <- read.table(file.path(path_dirB, single_file), header = TRUE) # 合并方式1:确认两个文件行顺序完全一一对应时使用,运行速度更快 merged_data <- cbind(data_A, data_B[, c("StartPos", "EndPos")]) # 合并方式2:不确定行顺序时使用,按Position列精准匹配,不会错位,把上面一行注释掉再放开下面这行即可 # merged_data <- merge(data_A, data_B[, c("Position", "StartPos", "EndPos")], by = "Position", all.x = TRUE) # 写出结果,制表符分隔、不带行号、不带字符串引号,和原始文件格式兼容 write.table(merged_data, file = file.path(path_out, paste0(single_file, ".txt")), sep = "\t", row.names = FALSE, quote = FALSE) }
注意事项
- Windows系统写路径时不要用单反斜杠
\,替换为正斜杠/或者双反斜杠\\,否则会读文件报错 - 优先推荐用按Position匹配的合并方式,就算两个文件的行排序不一致,也不会出现数据错位的问题
- 代码默认读取的文件格式和给出的示例一致:第一行为表头,列之间用空格/制表符分隔,如果文件有其他分隔符,在
read.table里加对应的sep参数即可
内容的提问来源于stack exchange,提问作者Anik Dutta
相关产品推荐
相关产品推荐

