我已经找到了其他关于在R iRanges中寻找重叠范围的帖子,但你能帮我解决这个额外的小问题吗?我有两个联系在一起的范围(一个可能的基因组重排,一个起始范围和一个结束范围),我想过滤掉母亲基因组中相同的范围
我已经找到了如下的停止和开始范围(chr编号,间隔开始,间隔结束),其中左侧的3列表示重排的开始,右侧的3列表示重排的结束(它们是名为SVDetect的程序的输出,该程序使用NGS数据来寻找与参考基因组具有异常比对的配对)。我有两个基因组,母克隆和女儿,并希望找到对女儿唯一的重排=我想过滤掉两个范围与另一个范围中两个范围的同一行重叠的行。范围可能略有不同,但如果两个范围重叠,这将强烈表明重排已经存在于母体中。R中的iRanges允许您很容易地查看一个范围是否与其他范围重叠,但我还没有找到一个解决方案,它可以告诉我它与哪个范围重叠,而不是一个非常慢的for循环。
女儿:
1 1384138 1384862 - 1 516731 516918
2 3758860 3759278 - 2 879828 879966 # (filter away this line as overlap with below)
2 3940051 3940470 - 2 3940856 3941250母亲:
2 3758858 3759282 - 2 879828 879966 # (overlap with this range)
1 1384138 1384862 - 3 116231 516918
2 3940051 3940470 - 3 1540856 3941250发布于 2014-12-19 22:48:27
诀窍是使用两组GRanges,一组用于重排开始,另一组用于重排结束,然后将结果组合如下:
### Create GRanges for daughter - copied from example
daughterStart <- GRanges(c(1,2,2), IRanges(c(1384138,3758860,3940051), c(1384862,3759278,3940470)))
daughterEnd <- GRanges(c(1,2,2), IRanges(c(516731,879828,3940856), c(516918,879966,3941250)))
### Create GRanges for mother - copied from example
motherStart <- GRanges(c(2,1,2), IRanges(c(3758858,1384138,3940051), c(3759282,1384862,3940470)))
motherEnd <- GRanges(c(2,3,3), IRanges(c(879828,116231,1540856), c(879966,516918,3941250)))starOverlap <- suppressWarnings( findOverlaps(query = daughterStart, subject = motherStart) ) # suppressWarnings to ignore wanings about different chromosomes
endOverlap <- suppressWarnings( findOverlaps(query = daughterEnd, subject = motherEnd ) )最后,我们确定重排-开始和重排-结束重叠中是否有任何相同的重叠:
> starOverlap %in% endOverlap
[1] FALSE TRUE FALSE> starOverlap@queryHits[ ! (starOverlap %in% endOverlap) ]
[1] 1 3由于这种方法依赖于findOverlaps,并且是矢量化的,因此它将快速地进行数百万次重新排列
https://stackoverflow.com/questions/24867924
复制相似问题