Schnittbereiche reduzieren
Ich versuche, einen Weg zu finden, um Zeilen mit sich überschneidenden Bereichen, die durch "Start" - und "Stopp" -Spalten gekennzeichnet sind, zu reduzieren und die reduzierten Werte in neuen Spalten aufzuzeichnen. Zum Beispiel habe ich diesen Datenrahmen:
my.df<- data.frame(chrom=c(1,1,1,1,14,16,16), name=c("a","b","c","d","e","f","g"), start=as.numeric(c(0,70001,70203,70060, 40004, 50000872, 50000872)), stop=as.numeric(c(71200,71200,80001,71051, 42004, 50000890, 51000952)))
chrom name start stop
1 a 0 71200
1 b 70001 71200
1 c 70203 80001
1 d 70060 71051
14 e 40004 42004
16 f 50000872 50000890
16 g 50000872 51000952
Und ich versuche, die überlappenden Bereiche zu finden und den größten Bereich aufzuzeichnen, der von den überlappenden reduzierten Zeilen in "start" und "stop" und den Namen der reduzierten Zeilen abgedeckt wird.
chrom start stop name
1 70001 80001 a,b,c,d
14 40004 42004 e
16 50000872 51000952 f,g
Ich denke, ich könnte die Pakete IRanges wie folgt verwenden:
library(IRanges)
ranges <- split(IRanges(my.df$start, my.df$stop), my.df$chrom)
Aber dann habe ich Probleme, die eingeklappten Spalten zu bekommen: Ich habe es mit findOvarlaps versucht, aber dies
ov <- findOverlaps(ranges, ranges, type="any")
aber ich denke nicht, dass das richtig ist.
Jede Hilfe wäre sehr dankbar.