Encontrar rangos superpuestos entre dos datos de intervalo
Tengo una tabla con coordenadas (start
, end
) de ca. 500000 fragmentos y otra tabla con 60000 coordenadas individuales que me gustaría hacer coincidir con los fragmentos anteriores. Es decir, para cada registro dedtCoords
tabla necesito buscar un registro endtFrags
mesa teniendo la mismachr
ystart
<=coord
<=end
(y recuperar eltype
de este registro dedtFrags
). ¿Es una buena idea usar R para esto o prefiero buscar otros idiomas?
Aquí está mi ejemplo:
require(data.table)
dtFrags <- fread(
"id,chr,start,end,type
1,1,100,200,exon
2,2,300,500,intron
3,X,400,600,intron
4,2,250,600,exon
")
dtCoords <- fread(
"id,chr,coord
10,1,150
20,2,300
30,Y,500
")
Al final, me gustaría tener algo como esto:
"idC,chr,coord,idF,type
10, 1, 150, 1, exon
20, 2, 300, 2, intron
20, 2, 300, 4, exon
30, Y, 500, NA, NA
"
Puedo simplificar un poco la tarea dividiendo la tabla en subtablas porchr
, entonces me concentraría solo en las coordenadas
setkey(dtCoords, 'chr')
setkey(dtFrags, 'chr')
for (chr in unique(dtCoords$chr)) {
dtCoordsSub <- dtCoords[chr];
dtFragsSub <- dtFrags[chr];
dtCoordsSub[, {
# ????
}, by=id]
}
pero todavía no me queda claro cómo debería trabajar dentro ... Estaría muy agradecido por cualquier sugerencia.
UPD. Por si acaso, pongo mi tabla real en el archivo.aquí. Después de desempaquetar en su directorio de trabajo, las tablas se pueden cargar con el siguiente código:
dtCoords <- fread("dtCoords.txt", sep="\t", header=TRUE)
dtFrags <- fread("dtFrags.txt", sep="\t", header=TRUE)