R 重叠基因组间隔和合并数据集

R 重叠基因组间隔和合并数据集,r,R,我想做一些类似于这个解决方案的事情,在这里,我有两个数据帧,我想找到重叠的区域,然后将相应的数据合并到命中 >x1 chr start stop CN 1 1 10 140 G 2 1 100 1000 G 3 1 1500 5000 L >x2 chr start stop gene 1 1 1 100 a 2 1 100 150 b 3 1 190 1000 c 4 1 1000

我想做一些类似于这个解决方案的事情,在这里,我有两个数据帧,我想找到重叠的区域,然后将相应的数据合并到命中

>x1
  chr start stop CN
1   1    10  140  G
2   1   100 1000  G
3   1  1500 5000  L



>x2
  chr start stop gene
1   1     1  100    a
2   1   100  150    b
3   1   190 1000    c
4   1  1000 2000    d
5   1  2000 5000    e
我可以找到与以下代码重叠的区域:

library(GenomicRanges)
gr1 = with(x1, GRanges(chr, IRanges(start=start, end=stop)))
gr2 = with(x2, GRanges(chr, IRanges(start=start, end=stop)))

hits = findOverlaps(gr1, gr2)
点击显示x1中与x2重叠的区域,例如:

> hits
Hits of length 8
queryLength: 3
subjectLength: 5
  queryHits subjectHits 
   <integer>   <integer> 
 1         1           1 
 2         1           2 
 3         2           1 
 4         2           2 
 5         2           3 
 6         2           4 
 7         3           4 
 8         3           5 

您可以使用
data.table
包中的
foverlaps

library(data.table)
setkey(setDT(x1), start, stop)
setkey(setDT(x2), start, stop)
foverlaps(x2, x1)
#   chr start stop CN i.chr i.start i.stop gene
#1:   1    10  140  G     1       1    100    a
#2:   1   100 1000  G     1       1    100    a
#3:   1    10  140  G     1     100    150    b
#4:   1   100 1000  G     1     100    150    b
#5:   1   100 1000  G     1     190   1000    c
#6:   1   100 1000  G     1    1000   2000    d
#7:   1  1500 5000  L     1    1000   2000    d
#8:   1  1500 5000  L     1    2000   5000    e

我设法找到了一个非常简单的解决方案。 使用代码:

x<-cbind(x1[queryHits(hits),],x2[subjectHits(hits),])

x如果您在linux或mac系统下,您可以安装bedtools()。
然后使用命令“intersectBed-a fileA.txt-b fileB.txt-wa-wb>youroutputfile.txt”。您将获得包含数据帧A和数据帧B的结果文件。

使用bedtools处理高吞吐量数据集将更快、更受欢迎

不幸的是,我的工作坚持我们使用windows。然而,我以前使用过bedtools,Galaxy.org也有允许这样做的工具。
x<-cbind(x1[queryHits(hits),],x2[subjectHits(hits),])