首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对r中的or语句,在向量中折叠三次字符串

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

Stack Overflow用户
提问于 2018-05-14 16:33:13
回答 2查看 87关注 0票数 1

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

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

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

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

等等,对于向量中的每个元素。

基本上,我试图在一个包含三个破折号的字符串中找到一个确切的单词(我不希望grep(CD4, ..)返回带有CD40的字符串)。这就是我想要做的,但我愿意接受其他建议

我的data.frame的一部分如下所示:

代码语言:javascript
复制
Genes <- as.data.frame(c("CD4-MyD88-IL27RA", "IL2RG-CD4-GHR","MyD88-CD8B-EPOR", "CD8A-IL3RA-CSF3R", "ICOS-CD40-LMP1"))
colnames(Genes) <- "Genes"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-14 17:08:06

这是一个单线.

代码语言:javascript
复制
Genes$Genes[grep(paste0("\\b",strings,"\\b",collapse="|"),Genes$Genes)]

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

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

票数 3
EN

Stack Overflow用户

发布于 2018-05-14 17:09:37

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

代码语言:javascript
复制
stringr::str_split(Genes$Genes, pattern = '-') %>% 
  purrr::map(
    function(data) {
      data[stringr::str_which(data, pattern = '^CD')]
    }
  )  %>% unlist
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50335079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档