为 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
我有一个包含多个字符串的向量
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