如何组合txt文件以Plink格式转换

时间:2017-11-10 14:58:42

标签: r bioinformatics genetics

我的26个数据文件(.txt)(每个染色体的估算基因型)如下所示:

CHR SNP1 SNP2 SNP3
1   3   1   2   3 
1   3   0   2   1
1   0   0   1   0
1   0   3   3   1
1   1   1   0   2


CHR SNP1 SNP2 SNP3
2   1   1   2   2 
2   0   3   1   1
2   0   0   1   0
2   0   3   3   2
2   3   2   0   1

如何以plink格式(.map和.ped)转换它们?

1 个答案:

答案 0 :(得分:0)

我将在这里做一些假设。您没有指定基因型的“3”表示,因此我将其编码为Plink(0)的默认缺失基因型。我使用“R”和“A”作为“参考”和“替代”等位基因的简单缩写; plink可以很好地阅读这些字符。如果你需要它来做其他事情,你需要编辑下面的字典。

此脚本实质上转换输入的第一行以创建.map文件中所需的列。它读取第二行以获得染色体编号。第三列保留默认的虚拟值“0”,因为厘摩是未知的。

ped文件是通过将基因型从您的数值转换为我假设它们代表的(再次在python词典中定义)生成的,包括前六个必需列(有关详细信息,请参阅https://www.cog-genomics.org/plink2/formats#fam)。重要的是,FID只是重复IID,因为我不知道这里的相关性。 IID(个人ID)只是行号(第一行是ind_1,第二行是ind_2,等等。只要您的不同染色体文件的顺序相同,这就很好。表型设置为“缺失”值 - 9.下面显示的测试文件格式正常。

#!/usr/bin/env python

import sys

infile_name = sys.argv[1]

pedDict = {
"0" : "R R",
"1" : "R A",
"2" : "A A",
"3" : "0 0"
}

def convertToPlink(infile_name):
    with open(infile_name, 'r') as infile:
        header = infile.readline().rstrip().split()
        chromosome = infile.readline().split()[0]
        with open('chr_' + chromosome + '.map', 'w') as mapfile:
            for POS in header[1:]:
                mapfile.write("\t".join([chromosome, chromosome+"_"+POS+"_SNP", "0", POS])+"\n")
    with open(infile_name, 'r') as infile:
        with open('chr_' + chromosome + '.ped', 'w') as pedfile:
            id_index = 0
            for line in infile:
                if not line.startswith("CHR"):
                    id_index += 1
                    IID = "ind_" + str(id_index)
                    line = line.rstrip().split()
                    pedfile.write(" ".join([IID, IID, "0", "0", "0", "-9"]+[pedDict[genotype] for genotype in line][1:])+ "\n")


convertToPlink(infile_name)

测试输入:chr_1.txt

CHR     59      100     130     165
1       3       1       2       3
1       3       0       2       1
1       0       0       1       0
1       0       3       3       1
1       1       1       0       2
执行

convertToPlink.py chr_1.txt

产生两个与plink兼容的文件:

chr_1.map

1       1_59_SNP        0       59
1       1_100_SNP       0       100
1       1_130_SNP       0       130
1       1_165_SNP       0       165

chr_1.ped

ind_1 ind_1 0 0 0 -9 0 0 R A A A 0 0
ind_2 ind_2 0 0 0 -9 0 0 R R A A R A
ind_3 ind_3 0 0 0 -9 R R R R R A R R
ind_4 ind_4 0 0 0 -9 R R 0 0 0 0 R A
ind_5 ind_5 0 0 0 -9 R A R A R R A A