Tengo dos data.frames cada uno con tres columnas: chrom, start & stop, llamémosles rangesA y rangesB. Para cada fila de rangos A, estoy buscando para encontrar la fila (en el caso) en los rangos B que contiene completamente la fila RangosUna fila, me refiero a rangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop
.Encontrar superposición en rangos con R
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 importante, simplemente hace que las cosas sean más legibles dada esta solución en particular.
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
para cada fila de rangesA:
matches <- which((rangesB[,'chrom'] == rangesA[row,'chrom']) &&
(rangesB[,'start'] <= rangesA[row, 'start']) &&
(rangesB[,'stop'] >= rangesA[row, 'stop']))
Calculo Tiene que haber una mejor (y por una mejor, me refiero más rápido en grandes instancias de rangeA y rangeB) forma de hacer esto que en bucle sobre este constructo. ¿Algunas ideas?
Buena puntero en IRanges, se olvidó de eso. No terminé yendo con esto porque no encajaba en mi propia situación por una variedad de razones, pero aún así es bueno saberlo. Mi ejemplo de juguete dejó un par de bits clave (mi propia culpa) que hace que trabajar con IRanges me resulte difícil de descifrar, y la solución merge() proporcionó una aceleración masiva tal como estaba. Además, si bien se escala masivamente también vemos muchos casos muy pequeños y lo que supongo fue que la sobrecarga del S4 estaba disminuyendo en esos casos. – geoffjentry
¿hay alguna manera de contar también superposiciones parciales? – Cina