/ / Sostituzione del valore nella colonna con il fattore esistente in r - r

Sostituendo il valore in colonna con il fattore esistente in r - r

Ho un set di dati, in cui la colonna "workclass" ha i seguenti valori:

inserisci la descrizione dell'immagine qui

Ora mi sembra che il valore "privat" sia davvero lo stesso di "Privato" e quindi vorrei cambiarlo di conseguenza

Se eseguo il comando seguente ricevo un messaggio di errore perché il fattore non è definito.

    > adult$workclass[adult$workclass == "privat"] <- "Private"
Warning message:
In `[<-.factor`(`*tmp*`, adult$workclass == "privat", value = c(7L,  :
invalid factor level, NA generated

Se "decomprimere" la colonna e "refattarla" nuovamente dopo l'operazione, finisco con due diversi fattori per "Privato".

    > 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

Come posso unire "privat" e "Private"?

risposte:

0 per risposta № 1

Qual è l'output di levels(adult$workclass)? Sembra che il tuo livello "Privato" non sia esattamente uguale alla stringa "Privato".

Quando eseguo il seguente codice, ottengo il risultato desiderato:

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 per risposta № 2

Puoi provare:

library(dplyr)
adult %>%
mutate(workclass = recode_factor(workclass, privat = "Private"))