Tengo un conjunto de datos, donde la columna "clase de trabajo" tiene los siguientes valores:
Ahora me parece que el valor "privat" es realmente el mismo que "Privado", por lo que me gustaría cambiarlo en consecuencia
Si ejecuto el siguiente comando, aparece un mensaje de error porque el factor no está definido.
> adult$workclass[adult$workclass == "privat"] <- "Private"
Warning message:
In `[<-.factor`(`*tmp*`, adult$workclass == "privat", value = c(7L, :
invalid factor level, NA generated
Si "desfactorizo" la columna y la "refactorizo" nuevamente después de la operación, termino con dos factores diferentes para "Privado".
> adult$workclass <- as.character(adult$workclass)
> adult$workclass[adult$workclass=="privat"] <- "Private"
> adult$workclass <- as.factor(adult$workclass)
> summary(adult$workclass)
Federal-gov Local-gov Never-worked Private
960 2093 7 22686
Self-emp-inc Self-emp-not-inc State-gov Without-pay
1116 2541 1298 14
Private NA"s
10 1836
¿Cómo puedo unir "privat" y "privado"?
Respuestas
0 para la respuesta № 1¿Cuál es la salida de levels(adult$workclass)
? Parece que su nivel "Privado" no es exactamente igual a la cadena "Privado".
Cuando ejecuto el siguiente código, obtengo el resultado deseado:
f <- data.frame(f=factor(c(
rep("Federal-gov", 960),
rep("Local-gov", 2093),
rep("Never-worked", 7),
rep("Private", 22686),
rep("Self-emp-inc", 1116),
rep("Self-emp-not-inc", 2541),
rep("State-gov", 1298),
rep("Without-pay", 14),
rep("privat", 10),
rep("NA"s", 1836)
)))
f$f[f$f=="privat"] <- "Private"
f <- droplevels(f)
table(f)
Federal-gov Local-gov NA"s Never-worked
960 2093 1836 7
Private Self-emp-inc Self-emp-not-inc State-gov
22696 1116 2541 1298
Without-pay
14
0 para la respuesta № 2
Puedes probar:
library(dplyr)
adult %>%
mutate(workclass = recode_factor(workclass, privat = "Private"))