web-dev-qa-db-fra.com

Plusieurs chaînes avec str_detect R

Je veux trouver plusieurs chaînes et les mettre dans une variable, mais je reçois toujours des erreurs.

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

Rien de tout cela n'a fonctionné. Existe-t-il une autre façon de le faire avec str_detect ou devrais-je essayer autre chose? Je veux qu'ils apparaissent également dans la même colonne.

19
Magick.M

Un moyen encore plus simple, à mon avis, pour votre liste assez courte de chaînes que vous souhaitez trouver peut être:

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

Comme c'est en fait ce

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

fait, comme recommandé par @penguin avant.

Pour une liste plus longue de chaînes que vous souhaitez détecter, je voudrais d'abord stocker les chaînes uniques dans un vecteur, puis utiliser l'approche de @ penguin, par exemple:

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

Cela a l'avantage que vous pouvez facilement utiliser le vecteur strings plus tard si vous le souhaitez ou devez le faire.

31
fabilous

C'est une façon de résoudre ce problème:

queries1 <- httpdf %>% 
  filter(str_detect(payload, paste(c("create", "drop", "select"),collapse = '|')))
28
penguin