/ / Sustituyendo valor en columna con factor existente en r - r

Sustituyendo valor en columna con factor existente en r - r

Tengo un conjunto de datos, donde la columna "clase de trabajo" tiene los siguientes valores:

enter image description here

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"))