web-dev-qa-db-fra.com

Existe-t-il une alternative à la fonction "réévaluer" de plyr lors de l'utilisation de dplyr?

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?

16
fmark

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.

21
aosmith

Nous pouvons le faire avec chartr à partir de base R

chartr("ac", "AC", x)

les données

x <- c("a", "b", "c")
3
akrun

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" 
2
Raoul Van Oosten

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)]
0
George Sotiropoulos