Как заменить переменные в R на основе нескольких условий? - PullRequest
0 голосов
/ 30 июня 2019

У меня есть столбец со списком возрастов, и я пытаюсь разделить возраст на три отдельных значения: молодой, средний возраст и старший.

Если я делаю вложенный ifelse, как в:

df$age <- ifelse(df$age <= 40, "young",
   ifelse((df$age > 40) & (df$age < 65), "middle",
      ifelse(df$age >= 65, "senior, "")))

... тогда все значения в столбце заменяются на «молодые» и «средние», без «старших».

Если я заменю значения по отдельности присвоением, как в:

df$age[df$age <= 40] <- "young"
df$age[df$age > 40 & df$age < 65] <- "middle"
df$age[df$age >= 65] <- "senior"

... тогда все значения в столбце заменяются на «старшие».

Похоже, что после того, как целые числа в столбце заменены на первый набор символов, весь столбец изменяется на класс символов. Я не уверен, что это является причиной проблемы, поэтому я попытался поместить as.integer вокруг функций, но результаты те же.

Как это исправить, чтобы все переменные в моем столбце были правильно помечены?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Вот два способа, оба только с основанием R.

Пример данных:

set.seed(1234)    # Make the results reproducible
age <- sample(10:100, 10)

Теперь классифицируйте числа.

i <- findInterval(age, c(0, 40, 65, Inf))
category <- c("young", "middle", "senior")[i]
data.frame(age, category)

Другой способ.

category2 <- cut(age, breaks = c(0, 40, 65, Inf), labels = c("young", "middle", "senior"))
data.frame(age, category2)
#   age category2
#1   37     young
#2   89    senior
#3   31     young
#4   18     young
#5   14     young
#6   47    middle
#7   25     young
#8   13     young
#9   79    senior
#10  88    senior
0 голосов
/ 30 июня 2019

Когда вы делаете первую замену, вы вводите столбец df$age в character.После этого операторы < и > работают по-разному.Попробуйте вместо этого создать новый столбец age2:

df$age2 <- NA_character_
df$age2 <- ifelse(df$age <= 40, "young",
   ifelse((df$age > 40) & (df$age < 65), "middle",
      ifelse(df$age >= 65, "senior, "")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...