Нахождение перекрывающихся диапазонов между двумя данными интервала

У меня есть одна таблица с координатами (start, end) ок. 500000 фрагментов и еще одна таблица с 60000 единичными координатами, которые я хотел бы сопоставить с прежними фрагментами. Т.е. для каждой записи изdtCoords таблица мне нужна для поиска записи вdtFrags стол с таким жеchr а такжеstart<=coord<=end (и получитьtype из этой записиdtFrags). Это хорошая идея, чтобы использовать R для этого, или я лучше смотреть на другие языки?

Вот мой пример:

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

В конце я хотел бы иметь что-то вроде этого:

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

Я могу немного упростить задачу, разделив таблицу на подтаблицыchrтак что я бы сосредоточился только на координатах

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

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

но мне все еще не ясно, как я должен работать внутри ... Я был бы очень благодарен за любые подсказки.

UPD. на всякий случай я положил свою настоящую таблицу в архивВот, После распаковки в ваш рабочий каталог таблицы могут быть загружены с помощью следующего кода:

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

Ответы на вопрос(2)

Ваш ответ на вопрос