Три раза свернуть строки в векторе для оператора или

У меня есть вектор с несколькими строками

strings <- c("CD4","CD8A")

и я хотел бы вывести оператор OR для передачи в grep, как это так

"CD4-|-CD4-|-CD4$|CD8A-|-CD8A-|-CD8A$"

и так далее для каждого элемента в векторе..

в основном я пытаюсь найти точное слово в строке, которая имеет три черты, (я не хочу grep(CD4, ..) вернуть строки с CD40). Вот как я думал об этом, но я открыт для других предложений

часть моего data.frame выглядит так:

Genes <- as.data.frame(c("CD4-MyD88-IL27RA", "IL2RG-CD4-GHR","MyD88-CD8B-EPOR", "CD8A-IL3RA-CSF3R", "ICOS-CD40-LMP1"))
colnames(Genes) <- "Genes"

2 ответа

Решение

Вот однострочник...

Genes$Genes[grep(paste0("\\b",strings,"\\b",collapse="|"),Genes$Genes)]

[1] "CD4-MyD88-IL27RA" "IL2RG-CD4-GHR"    "CD8A-IL3RA-CSF3R"

Он использует маркеры границы слова \\b чтобы убедиться, что он соответствует полные подстроки (как - не считается частью слова).

Я не знаю, понял ли я. Если я понял, следующая команда вернет то, что вы хотите

stringr::str_split(Genes$Genes, pattern = '-') %>% 
  purrr::map(
    function(data) {
      data[stringr::str_which(data, pattern = '^CD')]
    }
  )  %>% unlist
Другие вопросы по тегам