Encontrar superposición en rangos con R
Tengo dos data.frames cada uno con tres columnas: chrom, start & stop, llamémoslos rangos A y rangos B. Para cada fila de rangos A, estoy buscando encontrar qué fila (si hay alguna) en rangos B contiene completamente los rangos A fila, con lo que quiero decirrangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop
.
En este momento estoy haciendo lo siguiente, que simplemente no me gusta mucho. Tenga en cuenta que estoy recorriendo las filas de rangos A por otras razones, pero ninguna de esas razones es probable que sea un gran problema, simplemente termina haciendo que las cosas sean más legibles dada esta solución en particular.
rangos A:
chrom start stop
5 100 105
1 200 250
9 275 300
rangosB:
chrom start stop
1 200 265
5 99 106
9 275 290
para cada fila en rangos A:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
Me imagino que tiene que haber una mejor manera (y mejor, quiero decir más rápido en grandes instancias de rangos A y rangos B) de hacer esto que en bucle sobre esta construcción. ¿Algunas ideas?