Ich bin ein Fan der revalue
Funktion ist plyr
zum Ersetzen von Strings. Es ist einfach und leicht zu merken.
Ich habe jedoch neuen Code nach dplyr
migriert, der anscheinend keine revalue
-Funktion aufweist. Was ist das akzeptierte Idiom in dplyr
für Dinge, die zuvor mit revalue
erledigt wurden?
Es gibt eine recode
-Funktion, die mit dplyr version dplyr_0.5.0 beginnt und revalue
von plyr sehr ähnlich ist.
Beispiel aus der recode
-Dokumentation Beispiele Abschnitt:
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"
Wenn Sie nur einige der Werte definieren, die Sie umkodieren möchten, wird der Rest standardmäßig mit NA
gefüllt.
recode(x, a = "Apple", c = "Car")
[1] "Car" "Apple" NA "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Dieses Verhalten kann mit dem Argument .default
geändert werden.
recode(x, a = "Apple", c = "Car", .default = x)
[1] "Car" "Apple" "b" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Es gibt auch ein Argument .missing
, wenn Sie fehlende Werte durch etwas anderes ersetzen möchten.
Wir können dies mit chartr
von base R
machen
chartr("ac", "AC", x)
x <- c("a", "b", "c")
Ich wollte die Antwort von @aosmith kommentieren, aber es fehlt mir an Ruf. Es scheint, dass heutzutage die Vorgabe der dplyr
-Funktion von recode
darin besteht, dass nicht festgelegte Ebenen nicht betroffen sind.
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"
Um alle nicht angegebenen Ebenen in NA
zu ändern, muss das Argument .default = NA_character_
eingefügt werden.
recode(x, a = "Apple", b = "banana", .default = NA_character_)
[1] "Apple" "banana" "Apple" "banana" "banana" "Apple" NA NA NA "Apple"
Eine Alternative, die ich praktisch finde, ist die Mapvalues-Funktion für die data.tables Z
df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]