У меня есть два data.frames, каждый из которых содержит три столбца: chrom, start и stop, пусть называет их диапазонами A и диапазонамиB. Для каждой строки диапазонов A я ищу, чтобы найти, какая строка (если есть) в диапазонах B полностью содержит строку rangeA, под которой я подразумеваю rangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop
.
Сейчас я делаю следующее, что мне очень не нравится. Обратите внимание, что я зацикливаюсь на рядах диапазонов A по другим причинам, но ни одна из этих причин, скорее всего, не будет большой проблемой, а просто заканчивает тем, что делает вещи более читаемыми с учетом этого конкретного решения.
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
для каждой строки в диапазонах A:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
Я полагаю, что лучше быть лучше (и, лучше, я имею в виду более быстрое использование больших экземпляров rangeA и диапазонов), чтобы сделать это, чем перебирать эту конструкцию. Любые идеи?