【发布时间】:2017-11-02 15:52:19
【问题描述】:
我正在与 PLINK 合作分析 SNP 芯片数据。
有谁知道如何去除重复的 SNP(按位置重复)?
【问题讨论】:
-
您可能会在更专业的网站bioinformatics.stackexchange.com获得更多答案
我正在与 PLINK 合作分析 SNP 芯片数据。
有谁知道如何去除重复的 SNP(按位置重复)?
【问题讨论】:
【讨论】:
您也可以使用--list-duplicate-vars 标志直接在 PLINK1.9 中执行此操作
与 <require-same-ref>、<ids-only> 或 <suppress-first> 修饰符一起取决于您想要做什么。
查看https://www.cog-genomics.org/plink/1.9/data#list_duplicate_vars了解更多详情
如果你想删除所有出现的重复变量,你必须在 --list-duplicate-vars 的输出文件上使用 --exclude 标志,
它应该有一个.dupvar 扩展名。
【讨论】:
我应该注意,下面给出的两个答案会产生不同的结果。这是因为sort | uniq方法只考虑了SNP和bp location;而PLINK 方法(--list-duplicate-vars)也考虑了A1 和A2。
类似于.map 文件上的sort | uniq,我们可以在.gen 文件上使用AWK,如下所示:
22 rs1 12 A G 1 0 0 1 0 0
22 rs1 12 G A 0 1 0 0 0 1
22 rs2 16 C A 1 0 0 0 1 0
22 rs2 16 C G 0 0 1 1 0 0
22 rs3 17 T CTA 0 0 1 0 1 0
22 rs3 17 CTA T 1 0 0 0 0 1
# Get list of duplicate rsXYZ ID's
awk -F' ' '{print $2}' chr22.gen |\
sort |\
uniq -d > chr22_rsid_duplicates.txt
# Get list of duplicated bp positions
awk -F' ' '{print $3}' chr22.gen |\
sort |\
uniq -d > chr22_location_duplicates.txt
# Now match this list of bp positions to gen file to get the rsid for these locations
awk 'NR==FNR{a[$1]=$2;next}$3 in a{print $2}' \
chr22_location_duplicates.txt \
chr22.gen |\
sort |\
uniq \
> chr22_rsidBylocation_duplicates.txt
cat chr22_rsid_duplicates.txt \
chr22_rsidBylocation_duplicates.txt \
> tmp
# Get list of duplicates (by location and/or rsid)
cat tmp | sort | uniq > chr22_duplicates.txt
plink --gen chr22.gen \
--sample chr22.sample \
--exclude chr22_duplicates.txt \
--recode oxford \
--out chr22_noDups
这会将rs2 归类为重复项;但是,对于 PLINK list-duplicate-vars 方法 rs2 不会被标记为重复。
如果想要使用 PLINK 获得相同的结果(对于 BGEN 文件格式来说这是一项不平凡的任务,因为 awk、sed 等 不要处理二进制文件! )您可以使用--rm-dup command from PLINK2.0。可以使用list 参数记录所有删除的重复 SNP 列表(到以.rmdup.list 结尾的文件),如下所示:
plink2 --bgen chr22.bgen \
--sample chr22.sample \
--rm-dup exclude-all list \
--export bgen-1.1 \ # Export as bgen version 1.1
--out chr22_noDups
注意:我将输出保存为 1.1 版,因为 plink1.9 仍然具有 plink 2.0 版中不可用的命令。因此,在 plink1.9 中(此时)使用 bgen 文件的唯一方法是使用较旧的 1.1 版本。
【讨论】: