如何去除PLINK格式1000G数据集中名称为.的SNP?
当然可以用PLINK轻松解决这个问题!我之前处理1000G数据时也碰到过不少SNP名称为.的情况,确实会给后续分析带来麻烦,下面给你分享两种高效的处理方式,分PLINK 1.9和2.0版本来说:
针对PLINK 1.9版本
方法1:生成排除列表后过滤
首先从你的PLINK .bim文件中提取所有名称为.的SNP,生成一个排除列表文件:
awk '$2 == "." {print $2}' your_data.bim > exclude_dot_snps.txt
然后用PLINK加载原始数据并排除这些SNP:
plink --bfile your_data --exclude exclude_dot_snps.txt --make-bed --out filtered_data
执行完后,filtered_data.bed/bim/fam就是去除了无效名称SNP的数据集。
方法2:直接用管道过滤(无需临时文件)
如果用的是Linux/macOS系统,可以用管道直接传递排除列表,省去生成临时文件的步骤:
plink --bfile your_data --exclude <(awk '$2 == "." {print $2}' your_data.bim) --make-bed --out filtered_data
针对PLINK 2.0版本
PLINK 2.0支持直接用表达式过滤,命令更简洁:
plink2 --bfile your_data --exclude 'ID=="."' --make-bed --out filtered_data
关于你用bcftool view未成功的可能原因
bcftool是针对VCF格式的工具,如果你直接用它处理PLINK格式的文件肯定不行。需要先把PLINK数据转成VCF,过滤后再转回PLINK,步骤会更繁琐:
# 先转VCF plink --bfile your_data --recode vcf --out temp_data # 过滤ID为.的SNP bcftools view -i 'ID != "." ' temp_data.vcf -Oz -o filtered_temp.vcf.gz # 转回PLINK格式 plink --vcf filtered_temp.vcf.gz --make-bed --out filtered_data
这种方法绕了一圈,不如直接用PLINK处理高效,所以更推荐前面的PLINK原生命令。
内容的提问来源于stack exchange,提问作者bha
相关产品推荐
相关产品推荐

