根据重叠的基因组范围合并数据帧

时间:2013-10-02 20:22:53

标签: r overlapping range

我有两个文件:

阿鲁

  chromosome position functionGVS
1      chr22 16050036  intergenic
2      chr22 16050039  intergenic
3      chr22 16050094  intergenic
4      chr22 16050097  intergenic
5      chr22 16050109  intergenic
6      chr22 16050115  intergenic

HUVEC

    chr    start      end function
1 chr22 16050000 16051244  R
2 chr22 16051244 16051521  T
3 chr22 16051521 16060433  R
4 chr22 16060433 16060582  T
5 chr22 16060582 16080564  R
6 chr22 16080564 16082420  T

我试图找到重叠的区域,使得anno $位置应该在huvec $ start&的范围内。 HUVEC $结束。这是我的代码:

gr.huvec = with(huvec, GRanges(V1, IRanges(start=V2,end=V3)))

gr.anno <- GRanges(seqnames=anno$chromosome, ranges=IRanges(start=anno$position, width=1))

hits = findOverlaps(gr.huvec,gr.anno)

我的问题是,现在,在我查询后点击&amp;主题命中,如何根据重叠区域将huvec $函数分配给anno。所以在我的情况下,anno $位置的每个位置都与第一个开始和位置重叠。 huvec的结束值,所以我想将相关的huvec $函数,即'R'分配给anno中的新列。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

anno的样本数据都在第一个时间间隔内,但我认为这应该是诀窍:

anno$function <- huvec$function[cut(anno$position, huvec$start, labels=FALSE)]

一个问题是,这会在最后一个时间间隔内返回NA,因此您可以将huvec$start替换为unique(huvec$start, huvec$end)

答案 1 :(得分:0)

我想出了另一条出路,认为它对其他人也有帮助:

anno[subjectHits(hits),4]<-huvec[queryHits(hits),4]

我检查了解决方案,结果是正确的。但说实话,我不确定这个是如何工作的,即如何找到相应的命中?