1

次のような snp.txt というファイルがあります。

chrom   chromStart  chromEnd    name    strand     observed     
chr1    259         260      rs72477211  +   A/G    single  
chr1    433         433      rs56289060  +   -/C    insertion   
chr1    491         492      rs55998931  +   C/T    single  
chr1    518         519      rs62636508  +   C/G    single  
chr1    582         583      rs58108140  +   A/G    single  

2番目のファイルgene.txtがあります

chrom   chromStart  chromEnd    tf_title    tf_score
chr1    200         270         NFKB1       123
chr1    420         440         IRF4        234
chr1    488         550         BCL3        231
chr1    513         579         TCF12       12
chr1    582         583         BAD170      89

私が望む最終的な出力は次のとおりです。output.txt

chrom   chromStart  chromEnd    name    strand  observed    tf_title    tf_score
chr1    259         260      rs72477211    +    A/G         NFKB1       123
chr1    433         433      rs56289060    +    -/C         IRF4        234
chr1    491         492      rs55998931    +    C/T         BCL3        231
chr1    518         519      rs62636508    +    C/G         TCF12       12
chr1    582         583      rs58108140    +    A/G         BAD170      89

私ができるようにしたい重要なことは、gene.txt を見て、snp.txt の名前列の rsnumber が chrom、chromStart、および chromEnd によって確立された同じ領域にあるかどうかを確認することです。

例えば:

snp.txt の最初の行では、rsid rs72477211 が chr1 の位置 259 と 260 の間にあります。

現在、gene.txt では、NFKB1 も chr1 にありますが、位置 200 と 270 の間にあります。これは、rsid rs72477211 が NFKB1 領域にあることを意味するため、出力 txt に記録されます。

パンダのマージ機能を使用してこれを行うことができず、どこから始めればよいかわかりません。ファイルは非常に大きいため、ループは非常に非効率的です。誰か助けてくれませんか?ありがとう!

4

1 に答える 1