Задача - определить гены, в которых есть хотя бы один SNP.Мы можем сделать это, пройдя пары позиций Start
и End
с map2
и спросив, попадает ли между ними какая-либо из позиций SNP:
library( tidyverse )
dfg %>% mutate( AnyHits = map2_lgl(Start, End, ~any(dfs$Position %in% seq(.x,.y))) )
# # A tibble: 4 x 4
# Gene Start End AnyHits
# <chr> <dbl> <dbl> <lgl>
# 1 gene1 1 5 FALSE
# 2 gene2 10 15 TRUE
# 3 gene3 20 25 FALSE
# 4 gene4 30 35 TRUE
Отсюдапросто %>% filter(AnyHits)
просто уменьшить ваш фрейм данных до строк, в которых было хотя бы одно попадание SNP.
Данные:
# Genes
dfg <- tibble( Gene = str_c("gene",1:4),
Start = c(1,10,20,30),
End = c(5,15,25,35) )
# SNPs
dfs <- tibble( Position = c(6,8,9,11,16,19,27,34),
SNP_ID = str_c("ss",1:8) )