2015-12-11 12 views
-1

Я написал код ниже, используя функцию «ifelse», , которая возвращает «рабочий» только в $ age_group, новый столбец, который я хочу создать в соответствии с переменной «age» " но только.Кодирование новой переменной в соответствии с диапазоном существующих переменных

Я не знаю, почему ... Можете ли вы помочь мне отладить мой код?

for(i in 1:length(a$age)) 
{ 
    ifelse(a$age<17, a$age_group<-"mid", 
        ifelse(a$age<20, a$age_group<-"high", 
             ifelse(a$age<24, a$age_group<-"univ", 
                 a$age_group<-"worker"))) 
} 

ответ

2

Мы можем использовать cut или findInterval:

with(a, cut(age, breaks=c(17, 20, 24, Inf), 
     labels=c('mid', 'high', 'univ', 'worker')) 
1

Ваш код является излишне сложным, и я подозреваю, что это также может быть довольно медленным. Имейте в виду, что ifelse векторизован. Таким образом, здесь не нужен цикл for. Основная проблема, однако, в том, что более поздние вызовы ifelse перезаписывают более ранние из-за того, что вы выполняете назначение внутри, вам нужно назначить назначение за пределами вызовов ifelse. Попробуйте следующее:

a$age_group <- ifelse(a$age < 17, "mid", 
        ifelse(a$age < 20, "high", 
         ifelse(a$age < 24, "univ", "worker"))) 
+0

Вы правы! Я обновил свой ответ. Теперь он должен работать. – swolf

Смежные вопросы