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