为 r 中的 or 语句折叠向量中的字符串三次

collapse strings in a vector three times for an or statement in r

我有一个包含多个字符串的向量

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

我想像这样输出一个 OR 语句传递给 grep

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

向量中的每个元素依此类推..

基本上我试图在一个包含三个破折号的字符串中找到一个确切的词,(我不希望 grep(CD4, ..) 到 return 带有 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"

这是一条线...

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

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

它使用单词边界标记 \b 来确保它匹配完整的子字符串(因为 - 不算作单词的一部分)。

不知道我有没有看懂。如果我明白了,下面的命令将return你想要的

stringr::str_split(Genes$Genes, pattern = '-') %>% 
  purrr::map(
    function(data) {
      data[stringr::str_which(data, pattern = '^CD')]
    }
  )  %>% unlist