Recherche chaine caractere - grep

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Damien Eden
Messages : 19
Enregistré le : 21 Sep 2017, 09:56

Recherche chaine caractere - grep

Messagepar Damien Eden » 04 Déc 2017, 15:50

Bonjour,
J'ai le data frame suivant :

Code : Tout sélectionner

v1=c("A","B","C","D","E","F")
v2=c("PT","L+D","BH","L+D","PT","L+G")
liste=list(v1,v2)
dta=data.frame(liste)
 colnames(dta)<-c("Nom","type")
dta$type<-as.factor(dta$type)

dta
Nom   type
A   PT
B   L+D
C   BH
D   L+D
E   PT
F   L+G


JE veux crée une nouvelle colonne (vrai) initialisée à true si le type est "L+D"
j'utilise grep, mais il comprend le "+" comme un opérateur et non comme un caractère de la chaine. Comment le faire reconnaitre comme faisant partie de la chaine de caractère?

Code : Tout sélectionner

dta$vrai<-with(dta, if_else(grepl("L+D"),type),T,F))


Merci d'avance,
Damien

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Recherche chaine caractere - grep

Messagepar Pierre-Yves Berrard » 04 Déc 2017, 16:01

Bonjour,

Remplacer "+" par "\\+".

Dans ce cas, à noter qu'on peut faire plus simple sans grep ni ifelse :

Code : Tout sélectionner

dta$vrai <- dta$type == "L+D"
PY

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Re: Recherche chaine caractere - grep

Messagepar Bastien Gamboa » 05 Déc 2017, 08:31

Bonjour,

Une autre approche : l'utilisation de l'argument fixed=TRUE dans grepl qui permet de ne pas interpréter les caractères spéciaux des expressions régulières :

Code : Tout sélectionner

grepl("L+D", dta$type, fixed=TRUE)

Mais d'accord avec Pierre-Yves, pas besoin d'expression régulière quand tu cherches une chaîne de character en entier, elles sont plus utiles quand tu cherches ton pattern dans "HJOIHL+Dlhqezf" par exemple.

HTH,
Bastien


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité