2015-10-28 41 views
6

Tôi đang cố gắng làm việc trên dữ liệu di truyền với R và tôi đã thấy một vài chủ đề có câu trả lời khá tốt liên quan đến hai dataframes và khoảng thời gian chồng chéo. Vấn đề của tôi là tôi có một dataframe với khoảng chồng chéo, mà tôi muốn hợp nhất, ví dụ:khoảng thời gian chồng chéo trong một khung dữ liệu trong r

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

Tôi muốn kết thúc với một cái gì đó như thế này:

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

Tôi cũng đang cố gắng để trở nên tốt hơn trong việc viết mã, vì vậy tôi đã tự hỏi điều gì sẽ là cách thanh lịch nhất để làm điều đó. Hy vọng điều này là không cần thiết với một số truy vấn khác,

+2

data.table :: foverlaps – Henk

Trả lời

14

Sử dụng GenomicRanges :: giảm:

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  * 

Cũng có thể sử dụng data.table::foverlaps hoặc GenomicRanges::findOverlaps, nhưng không phải là đơn giản.

+0

Tôi đoán đó chỉ là 'setkey (setDT (df)); duy nhất (foverlaps (df, df), by = "i.stop") ', không? –

+0

Cảm ơn, hoạt động như một nét duyên dáng :-) Bạn đã giới thiệu cho tôi một bộ công cụ tuyệt vời – madmaxthc

Các vấn đề liên quan