/ / Заместване на стойността в колона със съществуващ фактор в r - r

Заместване на стойността в колона със съществуващ фактор в r - r

Имам набор от данни, където колоната "работна класа" има следните стойности:

въведете описанието на изображението тук

Сега ми се струва, че стойността "privat" е наистина същата като "Private" и затова бих искала да го променя съответно

Ако изпълня следната команда, получавам съобщение за грешка, защото факторът не е дефиниран.

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

Ако аз "unfactor" на колоната и "refactor" го отново след операцията, в крайна сметка с два различни фактора за "Private".

    > 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

Как да обединя "частен" и "частен"?

Отговори:

0 за отговор № 1

Какъв е резултатът от levels(adult$workclass)? Изглежда, че вашето ниво "Private" не е точно равно на низа "Private".

Когато изпълня следния код, получавам желания резултат:

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 за отговор № 2

Можете да опитате:

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