我需要过滤掉数据框中包含这个确切字符串“S[Phospho(STY)]Q”的行。但是,在每种情况下,该字符串都位于较大字符串的中间,从不在开头,也从不在结尾。
我遇到的问题是在下面的列表中我希望我的代码提取 QGS[Phospho(STY)]QAG 和 GS[Phospho(STY)]QP 但 str_detect 函数只提取那些行字符串中包含仅部分匹配的其他字母,例如 SSQGS[Phospho(STY)]DDEQ.
我尝试添加S[磷酸(STY)]Q,但没有过滤任何内容
有什么建议吗?谢谢!
可重现的示例:
`col <- c("QGS[Phospho(STY)]QAG",
"GS[Phospho(STY)]QP",
"SSQGS[Phospho(STY)]DDEQ",
"SSQGS[Phospho(STY)]DDEQI",
"S[Phospho(STY)]TSSQPE")
dat <- data.frame(col)
STQ_dat <- dat %>%
filter(str_detect(col, "S[phospho(STY)]Q"))
STQ_dat`
首先,您必须考虑要查找的字母的正确大小写,即使用
P
而不是 p
。其次,默认情况下,提供给 pattern=
的 str_detect
被解释为正则表达式,并且 [
和 ]
(以及 (
和 )
)都是正则表达式中的特殊字符,即您有使用 \\
来逃避它们,即 \\[
来寻找 [
。您使用 []
的方式指定了一组有效符号,例如包含 SSQ
的字符串将与您的模式匹配,因为中间的 S
与指定集合中的字母匹配。避免转义的第二个选择是将模式包装在 fixed()
: 中
library(stringr)
library(dplyr, warn = FALSE)
dat %>%
filter(
str_detect(col, "S\\[Phospho\\(STY\\)\\]Q")
)
#> col
#> 1 QGS[Phospho(STY)]QAG
#> 2 GS[Phospho(STY)]QP
dat %>%
filter(
str_detect(col, fixed("S[Phospho(STY)]Q"))
)
#> col
#> 1 QGS[Phospho(STY)]QAG
#> 2 GS[Phospho(STY)]QP