【发布时间】:2015-05-12 01:30:34
【问题描述】:
我有这个字符串:
myStr <- "I am very beautiful btw"
str <- c("very","beauti","bt")
现在我想检查myStr 是否包含str 中的所有字符串,我该如何在R 中做到这一点?例如上面它应该是TRUE。
非常感谢
【问题讨论】:
标签: r
我有这个字符串:
myStr <- "I am very beautiful btw"
str <- c("very","beauti","bt")
现在我想检查myStr 是否包含str 中的所有字符串,我该如何在R 中做到这一点?例如上面它应该是TRUE。
非常感谢
【问题讨论】:
标签: r
是的,您可以使用grepl(实际上不是grep),但您必须为每个子字符串运行一次:
> sapply(str, grepl, myStr)
very beauti bt
TRUE TRUE TRUE
如果所有结果都为真,则只得到一个结果,请使用all:
> all(sapply(str, grepl, myStr))
[1] TRUE
编辑:
如果您要检查多个字符串,请说:
myStrings <- c("I am very beautiful btw", "I am not beautiful btw")
然后运行sapply 代码,它将返回一个矩阵,其中myStrings 中的每个字符串对应一行。在每一行应用all:
> apply(sapply(str, grepl, myStrings), 1, all)
[1] TRUE FALSE
【讨论】:
apply去矩阵,你也可以这样做:do.call(mapply, c(all,lapply(str, grepl, myStrings) ))
使用stringr 你可以这样做:
str_detect(myStr, str)
为每个子字符串返回一个结果:
#[1] TRUE TRUE TRUE
或者根据@thelatemail 的建议,如果你想知道它们是否都是真的:
all(str_detect(myStr,str))
这给出了:
#[1] TRUE
您还可以在myStr 中找到与str 匹配的每个字符的位置(开始、结束)
str_locate(myStr, str)
这给出了:
# start end
#[1,] 6 9
#[2,] 11 16
#[3,] 21 22
【讨论】:
stringr,请使用适当的函数 - all(str_detect(myStr,str))