それぞれ 3 つの列を持つ 2 つの data.frames があります: chrome、start & stop、それらを rangeA と rangeB と呼びましょう。rangeA の各行について、rangeB のどの行 (存在する場合) に rangeA 行が完全に含まれているかを探していますrangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop
。
現在、私は次のことを行っていますが、これはあまり好きではありません。他の理由で rangeA の行をループしていることに注意してください。ただし、これらの理由はどれも大したことではありません。この特定のソリューションを考えると、物事が読みやすくなるだけです。
範囲A:
chrom start stop
5 100 105
1 200 250
9 275 300
範囲B:
chrom start stop
1 200 265
5 99 106
9 275 290
rangeA の各行について:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
この構成をループするよりも、これを行うためのより良い方法 (つまり、rangeA と rangeB の大きなインスタンスよりも高速であることを意味します) が必要だと思います。何か案は?