在R中基于起始与结束位置重叠查找匹配基因
问题:根据基因位置重叠关系匹配跨组基因
现有如下结构的大型数据框,需要根据start和end的区间重叠关系,找出每个基因匹配的其他组基因,最终得到包含match列的结果:
library(tidyverse) data <- data.frame(group=c(1,1,1,2,2,2), genes=c("A","B","C","D","E","F"), start=c(1000,2000,3000,800,400,2000), end=c(1500,2500,3500,1200,500,10000)) # 原数据输出 #> group genes start end #> 1 1 A 1000 1500 #> 2 1 B 2000 2500 #> 3 1 C 3000 3500 #> 4 2 D 800 1200 #> 5 2 E 400 500 #> 6 2 F 2000 10000
期望输出:
#> group genes start end match #> 1 1 A 1000 1500 A-D #> 2 1 B 2000 2500 B-F #> 3 1 C 3000 3500 C-F #> 4 2 D 800 1200 A-D #> 5 2 E 400 500 NA #> 6 2 F 2000 10000 F-C-B
解决方案
核心思路是:先通过自连接找出所有跨组且区间重叠的基因对,再整理每个基因的匹配列表,最后合并回原数据。具体代码如下:
library(tidyverse) # 1. 定义原数据 data <- data.frame(group=c(1,1,1,2,2,2), genes=c("A","B","C","D","E","F"), start=c(1000,2000,3000,800,400,2000), end=c(1500,2500,3500,1200,500,10000)) # 2. 找出所有跨组且区间重叠的基因关系 overlaps <- data %>% crossing(data) %>% # 只匹配不同组的基因 filter(group.x != group.y) %>% # 判断区间是否重叠:x的起始 <= y的结束 且 x的结束 >= y的起始 filter(start.x <= end.y & end.x >= start.y) %>% select(genes.x, genes.y, start.y) # 3. 整理每个基因的匹配列表 match_list <- overlaps %>% group_by(genes.x) %>% # 多个匹配基因按start降序排列(对应F的匹配顺序C-B) arrange(desc(start.y), .by_group = TRUE) %>% # 拼接自身和匹配基因 summarise(match = c(genes.x, unique(genes.y)) %>% paste(collapse = "-")) %>% rename(genes = genes.x) # 4. 统一双向匹配的格式(比如A和D互相匹配,让D的match和A一致) match_list <- match_list %>% mutate(match = ifelse( str_detect(match, "-"), pmap_chr(list(genes, match), function(g, m) { other_gene <- str_remove(m, paste0(g, "-")) if (other_gene %in% match_list$genes) { other_match <- match_list$match[match_list$genes == other_gene] if (str_detect(other_match, g)) other_match else m } else m }), match )) # 5. 合并回原数据,无匹配项设为NA result <- data %>% left_join(match_list, by = "genes") %>% replace_na(list(match = NA)) # 查看结果 print(result)
代码说明
- 步骤2使用
crossing做全自连接,筛选不同组且区间重叠的基因对,区间重叠判断是基因组学中常用的标准逻辑。 - 步骤3对每个基因的匹配结果按
start降序排列,保证F的匹配顺序是C-B。 - 步骤4处理双向匹配的一致性,比如A和D互相匹配时,两者的
match统一为A-D。 - 最后合并回原数据,给无匹配的基因填充
NA。
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

