我用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循环来实现,但我想知道如果可以通过任何其他更短的方法来实现这一点
答案 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的名称