我有两个数据框,每个数据框有三列:chrom、start和stop,我们称它们为rangesA和rangesB。对于rangesA的每一行,我需要找到哪些(如果有)rangesB的行完全包含了rangesA的行-我指的是rangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop
。
目前我正在做以下操作,但我不太喜欢这种方法。请注意,我正在循环处理rangesA的行,但除了阅读此特定解决方案更加清晰外,其他原因都不太重要。
rangesA:
chrom start stop
5 100 105
1 200 250
9 275 300
rangesB:
chrom start stop
1 200 265
5 99 106
9 275 290
对于rangesA中的每一行:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
我猜肯定有一种更好的方法(通过更快的方式处理大范围的rangesA和rangesB),而不是循环这个结构。有什么想法吗?