2016-02-27 68 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