43

我想找到多个字符串并将其放入一个变量中,但是我不断收到错误。

queries <- httpdf %>% filter(str_detect(payload, "create" || "drop" || "select"))
Error: invalid 'x' type in 'x || y'

queries <- httpdf %>% filter(str_detect(payload, "create" | "drop" | "select"))
Error: operations are possible only for numeric, logical or complex types

queries1 <- httpdf %>% filter(str_detect(payload, "create", "drop", "select"))
Error: unused arguments ("drop", "select")

这些都不起作用。有没有其他方法可以做到这一点,str_detect或者我应该尝试其他方法吗?我希望它们也显示在同一列中。

4

2 回答 2

70

在我看来,对于您想要查找的非常短的字符串列表,一种更简单的方法可以是:

queries <- httpdf %>% filter(str_detect(payload, "create|drop|select"))

因为这实际上是什么

[...] paste(c("create", "drop", "select"),collapse = '|'))[...]

正如@penguin 之前推荐的那样。

对于您想要检测的更长的字符串列表,我会首先将单个字符串存储到一个向量中,然后使用@penguin 的方法,例如:

strings <- c("string1", "string2", "string3", "string4", "string5", "string6")
queries <- httpdf %>% 
  filter(str_detect(payload, paste(strings, collapse = "|")))

这样做的好处是,strings如果您想要或必须使用,您以后也可以轻松地使用该向量。

于 2018-05-03T20:42:56.150 回答
40

这是解决此问题的一种方法:

queries1 <- httpdf %>% 
  filter(str_detect(payload, paste(c("create", "drop", "select"),collapse = '|')))
于 2017-01-19T10:18:33.020 回答