我正在与PLINK合作分析全基因组数据。
有谁知道如何删除重复的 SNP?
在 PLINK 1.9 中,使用--list-duplicate-vars suppress-first
,它将列出重复项,并删除一个(第一个),而另一个保持不变。我知道这会滑倒。
除了--exclude
像戴维建议的那样使用之外,您还可以使用--extract
, 保留而不是摆脱 SNP 列表。在任何基于 Unix 的系统上都有一个简单的方法(假设您的数据是 PED/MAP 格式并被染色体分割):
for i in {1..22}; do
cat yourfile_chr${i}.map | grep "$i" | cut -f -4 | uniq | cut -f -2 | keepers_chr${i}.txt;
done
这将为位于唯一位置的 SNP 创建一个keepers_chr.txt
包含 SNP ID 的文件。然后运行 PLINK 输入你的原始文件并使用--extract keepers_chr
,--make-bed --out unique_file
我知道没有自动执行此操作的命令,但我过去执行此操作的方式是获取重复的 SNP 列表,例如将重复项更改为 rs1001.dup,然后运行--update-allele --update-name
然后创建重复项的列表,因此所有条目都将.dup
在其名称的末尾,然后运行--extract duplicateSNPs.txt --make-bed --out yourfilename.dups.removed
如果您熟悉 R,那么获取重复的 SNP 列表应该不会太难。很抱歉给您一个“好吧,学习 X !!!” 回答
其他一些可能有帮助/感兴趣的想法:
您还可以使用 bcftools 删除 vcf 重复项,命令bcftools norm -D, --remove-duplicates
bcftools 文档可以在https://samtools.github.io/bcftools/bcftools.html找到
本着也只是使用 Unix 删除重复项的精神,我以前使用过以下内容(输入是压缩的 vcf 文件)gunzip -c input.vcf.gz | grep "^[^##]" | cut -f3 | sort | uniq -d > plink.dupvar
plink.dupvar 是 PLINK 程序在执行重复删除步骤时查找的文件名。
尽管您必须使用 TPED 文件,但使用 R 更容易。一旦您设法获得 TPED 文件,只需将其复制并粘贴到 R 控制台中:
a = read.table("yourfile.TPED",sep = " ",header=FALSE)
b = a[!duplicated(a$V2),]
write.table(b,file="newfile.TPED",sep=" ",quote = FALSE,col.names = FALSE, row.names=FALSE)
没有重复项将newfile.TPED
出现在 R 工作目录中。提示:您可以将脚本的部分yourfile.TPED
和newfile.TPED
部分更改为文件的实际名称。