Encontrando intervalos sobrepostos entre dois dados de intervalo

Eu tenho uma tabela com coordenadas (start, end) de ca. 500000 fragmentos e outra tabela com 60000 coordenadas simples que gostaria de combinar com os antigos fragmentos. Ou seja, para cada registro dedtCoords tabela eu preciso procurar um registro emdtFrags mesa com o mesmochr estart<=coord<=end (e recuperar otype deste registro dedtFrags). É uma boa ideia usar o R ​​para isso, ou eu deveria procurar outras linguagens?

Aqui está o meu exemplo:

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
")

No final, gostaria de ter algo assim:

"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
"

Eu posso simplificar um pouco a tarefa dividindo a tabela em subtabelas porchr, então eu me concentraria apenas nas coordenadas

setkey(dtCoords, 'chr')
setkey(dtFrags,  'chr')

for (chr in unique(dtCoords$chr)) {
  dtCoordsSub <- dtCoords[chr];
  dtFragsSub  <-  dtFrags[chr];
  dtCoordsSub[, {
    # ????  
  }, by=id]  
}

mas ainda não está claro para mim como devo trabalhar dentro ... eu ficaria muito grato por qualquer dica.

UPD. apenas no caso, eu coloquei minha tabela real no arquivoAqui. Depois de descompactar para o seu diretório de trabalho, as tabelas podem ser carregadas com o seguinte código:

dtCoords <- fread("dtCoords.txt", sep="\t", header=TRUE)
dtFrags  <- fread("dtFrags.txt",  sep="\t", header=TRUE)

questionAnswers(2)

yourAnswerToTheQuestion