比较基因组学:如何比较序列范围

时间:2015-03-26 12:07:15

标签: r performance range

我用VISTA对两种细菌进行了基因组比较。

这个工具给了我两个细菌之间常见的DNA序列区域,但我最感兴趣的是知道哪个CDS存在于第二个细菌中缺乏的细菌

通过使用R,我设法使用VISTA信息生成data.frame,其中包括FIRST细菌专有的碱基区域(范围)。这些区域必须预先包含第二个区域缺乏的基因(CDS)。

head(rango_vacio)  # Regions (mapped bp) exclusive to the first bacteria
   V1      V2
11552   13259
13365   13263
37168   37169
.....   .....

另一方面,我已经处理了这种相同细菌的gff文件来提取CDS序列。该数据框包含每个CDS的起点和终点,以及相应蛋白质的登录名

head(cds_TIGR4) # A list of the cds of this bacteria
startbp   endbp   accession
197       1158    NP_344444
1717      2853    NP_344445
2864      3112    NP_344446
.....     ....    .....

重要提示:数据框“rango_vacio”和“cds_TIGR4”都使用与基数相同的参考,因此我可以比较两者

现在,我的问题的答案应该很容易实现,因为我只需要使用CDS本身的范围作为参考来找到每个rango_vacio范围中存在的CDS

我可以通过使用一组非常复杂的for循环来实现,但我想知道如果可以通过任何其他更短的方法来实现这一点

1 个答案:

答案 0 :(得分:0)

最后,我相信我找到了自己的方法

GenomicRanges不能在我的情况下使用,因为我的data.frame之一包含cds范围,包括strandness。另一个只包含范围

所以我使用了IRange包。

我简化了两个数据帧,包含范围的开始和结束以及cds。一个名为rango,另一个名为cds

library(IRanges)
ir_rango <- IRanges(rango[,1], rango[,2])
ir_cds <- IRanges(cds[,1], cds[,2])
common <- findOverlaps(ir_cds, ir_rango)
common <- as.matrix(common)
unique_cds <- common[,1]
uniques <- which(duplicated(unique_cds))
uniques

uniques包含ir_cds中显示的相应范围的行号。现在我只需要提取cds的名称