我有两个data.frame,每个都有三列:chrom、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 的大型实例上更快)的方法来执行此操作,而不是循环遍历此构造。有任何想法吗?