Je suis fan de la fonction revalue
est plyr
pour la substitution de chaînes. C'est simple et facile à retenir.
Cependant, j'ai migré le nouveau code vers dplyr
qui ne semble pas avoir de fonction revalue
. Quel est l'idiome accepté dans dplyr
pour faire des choses déjà faites avec revalue
?
Une fonction recode
est disponible à partir de dplyr version dplyr_0.5.0, qui ressemble beaucoup à revalue
de plyr .
Exemple construit à partir de la documentation recode
Exemples section:
set.seed(16)
x = sample(c("a", "b", "c"), 10, replace = TRUE)
x
[1] "a" "b" "a" "b" "b" "a" "c" "c" "c" "a"
recode(x, a = "Apple", b = "Bear", c = "Car")
[1] "Car" "Apple" "Bear" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Si vous définissez uniquement certaines des valeurs que vous souhaitez recoder, le reste est par défaut rempli de NA
.
recode(x, a = "Apple", c = "Car")
[1] "Car" "Apple" NA "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Ce comportement peut être modifié à l'aide de l'argument .default
.
recode(x, a = "Apple", c = "Car", .default = x)
[1] "Car" "Apple" "b" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Il existe également un argument .missing
si vous souhaitez remplacer les valeurs manquantes par quelque chose d'autre.
Nous pouvons le faire avec chartr
à partir de base R
chartr("ac", "AC", x)
x <- c("a", "b", "c")
Je voulais commenter la réponse de @aosmith, mais je manque de réputation. Il semble qu’aujourd’hui, la fonction dplyr
de recode
consiste par défaut à ne pas affecter les niveaux non spécifiés.
x = sample(c("a", "b", "c"), 10, replace = TRUE)
x
[1] "c" "c" "b" "b" "a" "b" "c" "c" "c" "b"
recode(x , a = "Apple", b = "banana" )
[1] "c" "c" "banana" "banana" "Apple" "banana" "c" "c" "c" "banana"
Pour modifier tous les niveaux non spécifiés en NA
, l'argument .default = NA_character_
doit être inclus.
recode(x, a = "Apple", b = "banana", .default = NA_character_)
[1] "Apple" "banana" "Apple" "banana" "banana" "Apple" NA NA NA "Apple"
Une alternative que je trouve pratique est la fonction mapvalues pour le fichier data.tables
df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]