对于r中的or语句,将向量中的字符串折叠三次

时间:2018-05-14 16:33:13

标签: r grep rep

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

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 :(得分:2)

这是一个单行...

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

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

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

答案 1 :(得分:0)

我不知道我是否理解。如果我得到它,以下命令将返回你想要的

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