2013-03-05 7 views
7

Überlappende habe ich einen Datenrahmen von n Zeilen und 3 SpaltenMerge Rang in einzigartige Gruppen

df 
    start end group 
1 178 5025  1 
2 400 5025  1 
3 983 5535  2 
4 1932 6918  2 
5 33653 38197  3 

Ich mag würde eine neue Spalte df$group2 die erneut klassifiziert Gruppen machen, die das gleiche sein überlappen. Zum Beispiel beginnt df$group[df$group==1] bei 178 und endet bei 5025. Dies überlappt mit df$group[df$group==2], die bei 983 beginnt und bei 6918 endet. Ich möchte eine neue Spalte erstellen, die jetzt Gruppe 1 und 2 als Gruppe 1 (und anschließend Gruppe 3) klassifiziert als Gruppe 2).

Ergebnis:

df 
    start end group group2 
1 178 5025  1  1 
2 400 5025  1  1 
3 983 5535  2  1 
4 1932 6918  2  1 
5 33653 38197  3  2 

Vielen Dank im Voraus für jede Hilfe.

Antwort

12

Sie werden IRanges Paket benötigen:

require(IRanges) 
ir <- IRanges(df$start, df$end) 
df$group2 <- subjectHits(findOverlaps(ir, reduce(ir))) 
> df 

# start end group group2 
# 1 178 5025  1  1 
# 2 400 5025  1  1 
# 3 983 5535  2  1 
# 4 1932 6918  2  1 
# 5 33653 38197  3  2 

Um IRanges zu installieren, geben Sie diese Zeilen in R:

source("http://bioconductor.org/biocLite.R") 
biocLite("IRanges") 

mehr zu erfahren (manuell etc ..) gehen here

+0

Kann Wird dies mit einer group_by() Anweisung gekoppelt, wenn wir eine andere Gruppierungsvariable haben? –