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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:20