[英]Merge dataframes based on overlapping genomic ranges
我有两个文件:
安诺
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
胡韦克
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 $ end的范围内。 这是我的代码:
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)
我的问题是,现在,在获得查询命中和主题命中之后,如何基于重叠区域将huvec $ function分配给anno。 所以在我的情况下,anno $ position中的每个位置都与huvec的第一个开始和结束值重叠,因此我想将相关的huvec $ function即“ R”分配给anno中的新列。 有什么建议么?
您关于anno
样本数据全部在第一个间隔中,但是我认为这应该是技巧:
anno$function <- huvec$function[cut(anno$position, huvec$start, labels=FALSE)]
一个问题是,它将在最后一个间隔返回NA
,因此您可以将huvec$start
替换huvec$start
unique(huvec$start, huvec$end)
我想出了另一种方法,认为它也可能对其他人有所帮助:
anno[subjectHits(hits),4]<-huvec[queryHits(hits),4]
我检查了解决方案,结果正确。 但说实话,我不确定这是如何工作的,即如何找到相应的匹配?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.