我有两个文件: 文件A看起来像
ProbeID rsID chr bp strand alleleA alleleB
SNP_A-1780270 rs987435 7 78599583 - C G
SNP_A-1780271 rs345783 15 33395779 - C G
SNP_A-1780272 rs955894 1 189807684 - G T
SNP_A-1780274 rs6088791 20 33907909 - A G
SNP_A-1780277 rs11180435 12 75664046 + C T
SNP_A-1780278 rs17571465 1 218890658 - A T
SNP_A-1780283 rs17011450 4 127630276 - C T
SNP_A-1780285 rs6919430 6 90919465 + A C
SNP_A-1780286 rs41528453 --- --- --- A G
SNP_A-1780287 rs2342723 16 5748791 + C T
文件B看起来像
^{pr2}$我想要的输出看起来像:
ProbeID call genotype
SNP_A-1780270 2 G G
SNP_A-1780271 0 C C
SNP_A-1780272 2 T T
SNP_A-1780274 1 A G
SNP_A-1780277 0 C C
SNP_A-1780278 2 T T
SNP_A-1780283 2 T T
SNP_A-1780285 2 C C
SNP_A-1780286 0 A A
SNP_A-1780287 0 C C
本质上,这与两个列表中的ProbeID匹配,在文件B中,检查call列中对应的“call”值。当call=0时,在相邻列中打印两次等位基因的值。当call=1时,打印等位基因A和等位基因B的值。当call=2时,打印等位基因b的值两次。在
使用pandas:
收益率
^{pr2}$如果您有许多Bfiles,您可以使用如下方法:
将
cfile
更改为适当的值。在使用嵌套字典可以很容易地完成此任务:
现在您只需迭代数据并只打印所需的内容。在
或者,如果这些行完全对应(或者如果使用python3,则只使用普通的
^{pr2}$zip
),则可以使用itertools.izip
一次处理一行:这是一个R解决方案。在
相关问题 更多 >
编程相关推荐