2015-10-28 13 views
6

Rでゲノムデータを処理しようとしていますが、2つのデータフレームとオーバーラップするインターバルに関連してかなり良い回答がありました。私の問題は、私は私がマージしたい重複した間隔、すなわちで1つのデータフレームを持っているということです。rのデータフレームのオーバーラップ間隔

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

私はこのようなもので終わるしたい:私もしようとしています

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

コーディングをより良くするために、私はそれを行う最もエレガントな方法が何であるか考えていました。これはGenomicRangesを使用して、

+2

data.table :: foverlaps – Henk

答えて

14

他のいくつかのクエリと冗長ではありませんホープ::削減:

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  * 

それは簡単なようdata.table::foverlapsまたはGenomicRanges::findOverlapsを使用しても可能だが、ではありません。

+0

私はそれがちょうど 'setkey(setDT(df))だと思います。一意(foverlaps(df、df)、by = "i.stop") '、いいえ? –

+0

ありがとう、魅力的な作品:-)あなたは私をかなりいいセットのツールに紹介しました – madmaxthc