「開始」列と「停止」列で示される、交差する範囲を持つ行を折りたたみ、折りたたまれた値を新しい列に記録する方法を見つけようとしています。たとえば、次のデータ フレームがあります。
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
そして、重複する範囲を見つけて、「開始」と「停止」の折りたたまれた重複する行と折りたたまれた行の名前でカバーされる最大の範囲を記録しようとしているので、次のようになります。
chrom start stop name
1 70001 80001 a,b,c,d
14 40004 42004 e
16 50000872 51000952 f,g
次のようにIRangesパッケージを使用できると思います:
library(IRanges)
ranges <- split(IRanges(my.df$start, my.df$stop), my.df$chrom)
しかし、折りたたまれた列を取得するのに問題があります。findOvarlaps で試しましたが、これは
ov <- findOverlaps(ranges, ranges, type="any")
しかし、これは正しくないと思います。
どんな助けでも大歓迎です。