2015-10-28 14 views
6

Ich versuche, mit R genomische Daten zu arbeiten, und ich habe ein paar Themen mit ziemlich guten Antworten zu zwei Datenrahmen und überlappenden Intervallen gesehen. Mein Problem ist, dass ich ein Datenrahmen mit überlappenden Intervallen, die ich zusammenführen möchte, das heißt:überlappende Intervalle in einem Datenrahmen in r

chrom start stop 
5  100  105 
5  100  105 
5  200  300 
9  275  300 
9  280  301 

Ich möchte mit so etwas Ende:

chrom start stop 
5  100  105 
5  200  300 
9  275  301 

ich auch versuche, um besser zu codieren, also fragte ich mich, was wäre der eleganteste Weg, es zu tun. Hoffe, dass dies mit einer anderen Abfrage nicht redundant ist,

+2

data.table :: foverlaps – Henk

Antwort

14

GenomicRanges Verwendung :: reduzieren:

require(GenomicRanges) 
as.data.frame(reduce(GRanges(df$chrom, IRanges(df$start, df$stop)))) 
# seqnames start end width strand 
# 1  5 100 105  6  * 
# 2  5 200 300 101  * 
# 3  9 275 301 27  * 

Es ist auch möglich, mit data.table::foverlaps oder GenomicRanges::findOverlaps, aber nicht so einfach.

+0

Meine Vermutung ist nur 'setkey (setDT (df)); unique (foverlaps (df, df), von = "i.stop") ', nein? –

+0

Danke, funktioniert wie ein Zauber :-) Du hast mir ziemlich schöne Werkzeuge vorgestellt – madmaxthc

Verwandte Themen