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

基于CHR与BP列匹配合并文件并添加对应列的技术求助

基于CHR和BP列匹配合并两个文件

问题说明

需要将File2的AF列合并到File1中,仅保留CHR和BP两列同时匹配的行,最终得到仅包含匹配结果的文件。

原始文件内容

  • File1:
CHR BP SNP ZSCORE
1   2534 rs123 0.5
1   2860 rs225 0.1
1   10000 rs356 0.8
  • File2:
CHR BP AF
1   2534 0.02
1   6538 0.1
1   12345 0.1

期望输出(File3)

CHR BP SNP ZSCORE AF
1   2534 rs123 0.5 0.02

可行解决方案

1. R(base R)

使用merge()时,明确指定匹配列并设置内连接,同时提前去重避免多对多匹配问题:

# 读取文件
file1 <- read.table("File1", header = TRUE, stringsAsFactors = FALSE)
file2 <- read.table("File2", header = TRUE, stringsAsFactors = FALSE)

# 去重(若存在重复的CHR+BP组合)
file1_clean <- file1[!duplicated(file1[, c("CHR", "BP")]), ]
file2_clean <- file2[!duplicated(file2[, c("CHR", "BP")]), ]

# 内连接合并,仅保留双向匹配的行
file3 <- merge(file1_clean, file2_clean, by = c("CHR", "BP"), all = FALSE)

# 输出结果,保持原始空格分隔格式
write.table(file3, "File3", sep = "   ", row.names = FALSE, quote = FALSE)

2. R(dplyr)

用inner_join()实现严格的内连接,配合distinct()去重:

library(dplyr)

file1 <- read.table("File1", header = TRUE, stringsAsFactors = FALSE)
file2 <- read.table("File2", header = TRUE, stringsAsFactors = FALSE)

file3 <- file1 %>%
  distinct(CHR, BP, .keep_all = TRUE) %>%
  inner_join(file2 %>% distinct(CHR, BP, .keep_all = TRUE), 
             by = c("CHR", "BP"))

write.table(file3, "File3", sep = "   ", row.names = FALSE, quote = FALSE)

3. AWK

通过数组映射快速匹配,无需提前排序:

awk 'NR==FNR {af[$1,$2]=$3; next} ($1,$2) in af {print $0, af[$1,$2]}' File2 File1 > File3
  • 逻辑:先遍历File2,用CHR,BP作为键存储AF值;再遍历File1,匹配成功则输出整行加对应AF。

4. Unix join 命令

需先按匹配列排序,再执行合并:

# 按CHR、BP列排序文件
sort -k1,1 -k2,2 File1 > File1_sorted
sort -k1,1 -k2,2 File2 > File2_sorted

# 合并并指定输出列
join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,1.4,2.3 File1_sorted File2_sorted > File3

# 清理临时文件(可选)
rm File1_sorted File2_sorted
  • 参数说明:-1 1 -2 1指定CHR为第一匹配列,-1 2 -2 2指定BP为第二匹配列;-o定义输出列的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:47:31