372 votes

Tester si les caractères dans la chaîne dans une R

Je suis en train de déterminer si une chaîne est un sous-ensemble d'une autre chaîne. Par exemple:

chars <- "test"
value <- "es"

Je veux retourner TRUE si la "valeur" apparaît comme une partie de la "chaîne de caractères". Dans le scénario suivant, je voudrais retourner false:

chars <- "test"
value <- "et"

521voto

smu Points 1921

Utiliser l' grepl fonction

grepl(value, chars)
# TRUE

42voto

Justin Points 19077

Vous souhaitez grepl:

> chars <- "test"
> value <- "es"
> grepl(value, chars)
[1] TRUE
> chars <- "test"
> value <- "et"
> grepl(value, chars)
[1] FALSE

33voto

bartektartanus Points 2472

Utilisez cette fonction à partir d' stringi paquet de:

> stri_detect_fixed("test",c("et","es"))
[1] FALSE  TRUE

Quelques repères:

library(stringi)
set.seed(123L)
value <- stri_rand_strings(10000, ceiling(runif(10000, 1, 100))) # 10000 random ASCII strings
head(value)

chars <- "es"
library(microbenchmark)
microbenchmark(
   grepl(chars, value),
   grepl(chars, value, fixed=TRUE),
   grepl(chars, value, perl=TRUE),
   stri_detect_fixed(value, chars),
   stri_detect_regex(value, chars)
)
## Unit: milliseconds
##                               expr       min        lq    median        uq       max neval
##                grepl(chars, value) 13.682876 13.943184 14.057991 14.295423 15.443530   100
##  grepl(chars, value, fixed = TRUE)  5.071617  5.110779  5.281498  5.523421 45.243791   100
##   grepl(chars, value, perl = TRUE)  1.835558  1.873280  1.956974  2.259203  3.506741   100
##    stri_detect_fixed(value, chars)  1.191403  1.233287  1.309720  1.510677  2.821284   100
##    stri_detect_regex(value, chars)  6.043537  6.154198  6.273506  6.447714  7.884380   100

7voto

nico Points 21115

Vous pouvez utiliser grep

grep("es", "Test")
[1] 1
grep("et", "Test")
integer(0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X