2016-02-27 70 views
1

我有一個數據集,其中包含特定位置(支架)上區段的初始位置和最終位置,如果在同一個支架中有一些segmens與其他區域重疊。R:使用R找到重疊區域

> head(jobs) 
JOB_N  Genome  Scaffold loc_i loc_f 
    1 PRJNA179522 Contig10285 1251 1502 
    1 PRJNA179522 Contig10285 1251 1602 
    2 PRJNA179522 Contig10285 1255 1499 
    2 PRJNA179522 Contig10285 828 1076 
    2 PRJNA179522 Contig783  245 1487 
    2 PRJNA179522 Contig783  822 1073  

我想要兩件事:第一個是找到所有單個腳手架中的所有重疊區域。 第二個是獲得一個新表,其中只包含每個「新」段的第一個和最後一個位置。輸出將是:

JOB_N  Genome  Scaffold loc_i loc_f 
    1 PRJNA179522 Contig10285 1251 1602 
    2 PRJNA179522 Contig10285 828 1076 
    2 PRJNA179522 Contig783  245 1487 

在此先感謝。

+1

參見'foverlaps'在'data.table'或'findOverlaps'在'IRanges' – MichaelChirico

回答

2

您已指定'個人腳手架',但您的示例輸出具有複製的腳手架。你想在這些組中包含JOB_NGenome嗎?

如果是這樣,一個data.table方法是分別找到minloc_imaxloc_f,爲每個需要

library(data.table) 

dt <- as.data.table(jobs) 

dt[, .(min_loc_i = min(loc_i), max_loc_f = max(loc_f)), by=.(JOB_N, Genome, Scaffold)] 

# JOB_N  Genome Scaffold min_loc_i max_loc_f 
#1:  1 PRJNA179522 Contig10285  1251  1602 
#2:  2 PRJNA179521 Contig10285  1251  1499 
#3:  2 PRJNA179522 Contig10285  828  1076 
#4:  2 PRJNA179522 Contig783  245  1487 

如果你只想單獨支架,你只能通過scaffold需要組

dt[, .(min_loc_i = min(loc_i), max_loc_f = max(loc_f)), by=.(Scaffold)] 
#  Scaffold min_loc_i max_loc_f 
#1: Contig10285  828  1602 
#2: Contig783  245  1487 
+0

MAYB e描述是錯誤的。我希望我會在每個腳手架上有很多細分(外顯子)。出於這個原因,我需要找到所有重疊區域。如果你注意,在我的例子中,#1和#2是重疊片段,但#3沒有。所以,在支架「Contig10285」中有兩個獨立的部分(不重疊的部分)。現在很清楚了嗎?不管怎麼說,還是要謝謝你! – MJRC

+0

@MJRC好的我想我現在明白你的意思了。我會對我的答案進行編輯 – SymbolixAU