Нахождение перекрывающихся диапазонов между двумя данными интервала
У меня есть одна таблица с координатами (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)