44

I want to find multiple strings and put it in a variable, however I keep getting errors.

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")

None of these worked. Is there another way to do it with str_detect or should i try something else? I want them to show up as in the same column as well.

Karolis Koncevičius
  • 8,331
  • 9
  • 53
  • 81
Magick.M
  • 475
  • 1
  • 5
  • 6

2 Answers2

72

An even simpler way, in my opinion, for your quite short list of strings you want to find can be:

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

As this is actually what

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

does, as recommended by @penguin before.

For a longer list of strings you want to detect I would first store the single strings into a vector and then use @penguin's approach, e.g.:

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

This has the advantage that you can easily use the vector strings later on as well if you want to or have to.

fabilous
  • 829
  • 8
  • 8
41

This is a way to solve this problem:

queries1 <- httpdf %>% 
  filter(str_detect(payload, paste(c("create", "drop", "select"),collapse = '|')))
Marcus Nunes
  • 819
  • 1
  • 14
  • 32
penguin
  • 1,176
  • 12
  • 26
  • 1
    With this example I'm getting "creator" (from "the creator is nice") because of "creat", how do I match only the exact word? – RxT Jul 10 '20 at 13:53