Три раза свернуть строки в векторе для оператора или
У меня есть вектор с несколькими строками
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