Znajdowanie nakładających się zakresów między dwoma danymi przedziałowymi
Mam jedną tabelę ze współrzędnymi (start
, end
) ok. 500000 fragmentów i kolejna tabela z 60000 pojedynczych współrzędnych, które chciałbym dopasować do poprzednich fragmentów. To znaczy dla każdego rekordu zdtCoords
stół muszę przeszukać rekorddtFrags
stół mający to samochr
istart
<=coord
<=end
(i pobierztype
z tego zapisudtFrags
). Czy w ogóle warto w tym celu użyć R, czy raczej szukać w innych językach?
Oto mój przykład:
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
")
Na koniec chciałbym mieć coś takiego:
"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
"
Mogę nieco uprościć zadanie, dzieląc tabelę na podtabele wedługchr
, więc skupiłbym się tylko na współrzędnych
setkey(dtCoords, 'chr')
setkey(dtFrags, 'chr')
for (chr in unique(dtCoords$chr)) {
dtCoordsSub <- dtCoords[chr];
dtFragsSub <- dtFrags[chr];
dtCoordsSub[, {
# ????
}, by=id]
}
ale nadal nie jest dla mnie jasne, jak powinienem pracować w środku ... Byłbym bardzo wdzięczny za wszelkie wskazówki.
UPD. na wszelki wypadek umieściłem mój prawdziwy stół w archiwumtutaj. Po rozpakowaniu do katalogu roboczego można załadować tabele z następującym kodem:
dtCoords <- fread("dtCoords.txt", sep="\t", header=TRUE)
dtFrags <- fread("dtFrags.txt", sep="\t", header=TRUE)