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?

Respuestas a la pregunta(6)

Su respuesta a la pregunta