три раза свернуть строки в векторе для оператора или - PullRequest
0 голосов
/ 14 мая 2018

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

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 ]

0 голосов
/ 14 мая 2018

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

stringr::str_split(Genes$Genes, pattern = '-') %>% 
  purrr::map(
    function(data) {
      data[stringr::str_which(data, pattern = '^CD')]
    }
  )  %>% unlist
0 голосов
/ 14 мая 2018

Здесь однострочный ...

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

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

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

...