2016-12-15 4 views
0

J'essaie de créer des clusters de contenu simples et faciles à écrire avec plusieurs expressions régulières.Regex Matching Valeurs négatives

Imaginez une liste de chaînes: c ("a", "b", "ac") Les groupes que je dois définir sont "Tous: a" et "Tous: b". Donc les valeurs "a" et "ac" sont "A" et "b" est "B".

myDF$contentGroup <- sub(".*a.*", "A", myDF$stringList) 

Cependant, cela se traduira par une colonne dans mon dataframe « contentGroup » qui contient la valeur de « stringList » si aucune correspondance est survenue. Donc, si je fais la même ligne de code avec "B", il écrasera les "A".

myDF$contentGroup <- sub(".*b.*", "B", myDF$stringList) 

Je ne peux pas trouver comment faire un cluster simple dans une seule ligne de code. Rendre le plus simple possible.

+0

'Grepl()' doit faire le travail. 'x <- c (" a "," b "," ac "); x [grepl ("a | A", x)] 'est-ce que vous voulez? –

+1

'' [[grep ('a', x, fixed = TRUE)] <- 'A'; x [grep ('b', x, fixed = VRAI)] <- 'B'' – Sotos

+2

^Ne pas oublier d'ajouter 'fixed = TRUE' dans ces statmentsfor ~ X10 boost dans les performances –

Répondre

0

Vous pouvez utiliser grep pour correspondre 'a' et 'b', et le remplacer comme suit,

x[grep('a', x, fixed = TRUE)] <- 'A' 
x[grep('b', x, fixed = TRUE)] <- 'B' 

x 
#[1] "A" "B" "A"