Проблема в том, что столбец уже является factor
. Поэтому, когда мы используем ifelse
, оно приводится к целочисленным значениям хранилища.
v1 <- factor(c('A', 'B', 'A', 'B', 'C'))
ifelse(v1 != 'A', v1, "TBD")
#[1] "TBD" "2" "TBD" "2" "3"
проверка целочисленных значений приведения
as.integer(v1)
#[1] 1 2 1 2 3
Вместо этого это может быть
ifelse(v1 != 'A', as.character(v1), "TBD")
#[1] "TBD" "B" "TBD" "B" "C"
Итак, мы можем изменить столбец на character
и затем оберните с factor
library(dplyr)
Train <- Train %>%
mutate(gender2 = factor(ifelse(gender != "-unknown-",
as.character(gender), "TBD")))
Или вместо преобразования / реконвертации используйте fct_recode
library(forcats)
Train <- Train %>%
mutate(gender2 = fct_recode(gender, "TBD" = "-unknown-"))
Используя воспроизводимый пример
iris1 <- iris %>%
mutate(Species2 = fct_recode(Species, "TBD" = "setosa"))
summary(iris1$Species2)
# TBD versicolor virginica
# 50 50 50
Просто хотел упомянуть, что summary
работает на столбце factor
при получении счетчика частоты. Мы также можем использовать table
, что является более общим, поскольку оно может работать на различных type
s
table(iris1$Species2)
table(as.character(iris1$Species2))