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)