добро пожаловать в Stackoverflow! В будущем, пожалуйста, опубликуйте минимальный, работоспособный пример ( MWE ).
genes <- tribble(~chr, ~source, ~type, ~start, ~end, ~strand, ~gene_id, ~symbol, ~gene_biotype,
2, "pseudogene", "gene", 143300987, 143301544, "+", "ENSG00000228134", "AC092578.1", "pseudogene",
2, "pseudogene", "gene", 143611664, 143613567, "+", "ENSG00000229781", "AC013444.1", "pseudogene",
2, "protein_coding", "gene", 143635067, 143799890, "+", "ENSG00000115919", "KYNU", "protein_coding",
2, "pseudogene", "gene", 143704869, 143705655, "-", "ENSG00000270390", "RP11-470B22.1", "pseudogene",
2, "miRNA", "gene", 143763269, 143763360, "-", "ENSG00000221169", "AC013444.2", "miRNA",
2, "protein_coding", "gene", 143848931, 144525921, "+", "ENSG00000075884", "ARHGAP15", "protein_coding")
x <- tribble(~chr_a, ~`point A`,
2, 143301002,
2, 143625061,
2, 143700941,
2, 143811317,
2, 144127323,
2, 144224689,
)
Я даю вам tidyverse
подход:
x %>%
nest_join(genes, by = c("chr_a" = "chr")) %>%
group_by(`point A`) %>%
mutate(genes = map(genes, ~filter(., `point A` >= start & `point A` <= end))) %>%
unnest(genes, keep_empty = TRUE)
для получения объединенной таблицы, в которой несовпадающие строки равны NA
. Или просто найдите те, которые соответствуют, не используя вложенные тиблы
x %>%
left_join(genes, by = c("chr_a" = "chr")) %>%
filter(`point A` >= start & `point A` <= end)