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)

Respuestas a la pregunta(2)

Su respuesta a la pregunta