gather - ¿Existe una alternativa a la función de "revalorización" de plyr cuando se usa dplyr?
summarize r dplyr (4)
Soy un fan de la función de revalue
es plyr
para sustituir cadenas. Es simple y fácil de recordar.
Sin embargo, he migrado un nuevo código a dplyr
que no parece tener una función de revalue
. ¿Cuál es el idioma aceptado en dplyr
para hacer cosas previamente realizadas con revalue
?
Hay una función de recode
disponible a partir de la versión dplyr dplyr_0.5.0 que parece muy similar a la revalue
de plyr .
Ejemplo construido desde la sección de ejemplos de documentación de recode
:
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 solo define algunos de los valores que desea recodificar, de manera predeterminada, el resto se rellena con NA
.
recode(x, a = "Apple", c = "Car")
[1] "Car" "Apple" NA "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
Este comportamiento se puede cambiar usando el argumento .default
.
recode(x, a = "Apple", c = "Car", .default = x)
[1] "Car" "Apple" "b" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
También hay un argumento .missing
si desea reemplazar los valores perdidos con otra cosa.
Podemos hacer esto con chartr
de base R
chartr("ac", "AC", x)
datos
x <- c("a", "b", "c")
Quería comentar sobre la respuesta de @aosmith, pero me falta reputación. Parece que hoy en día el valor predeterminado de la función dplyr
de dplyr
es dejar los niveles no especificados afectados.
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"
Para cambiar todos los niveles no .default = NA_character_
a NA
, se debe incluir el argumento .default = NA_character_
.
recode(x, a = "apple", b = "banana", .default = NA_character_)
[1] "apple" "banana" "apple" "banana" "banana" "apple" NA NA NA "apple"
Una alternativa que me parece útil es la función mapvalues para data.tables, por ejemplo,
df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]