Использование функции ifelse в R для перекодирования уровней категориальной переменной

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

Используемый фрейм данных — танец. Переменная — Тип. Из комментариев, которые я получил, вот что у меня есть:

ifelse(dance$Type=="Swg","Swing", 
ifelse(dance$Type=="Ldy","Lindy",
ifelse(dance$Type=="Blue","Blues",
else(dance$Type=="Contra","Contra"))))

Я продолжаю получать сообщения об ошибках. Все ли запятые стоят правильно? Кроме того, я правильно закончил?

Я продолжаю получать сообщения об ошибках, плюс я должен каким-то образом указать фрейм данных, который я использую.

Любая помощь будет принята с благодарностью. Спасибо.


person Vixxen81    schedule 22.11.2015    source источник
comment
Пожалуйста, предоставьте немного больше информации. В зависимости от класса Type вы можете сделать это по-разному.   -  person ekstroem    schedule 23.11.2015
comment
Тип - это фактор. Это то, что ты имеешь в виду?   -  person Vixxen81    schedule 23.11.2015
comment
Вы должны правильно вложить свои вызовы ifelse, например: ifelse(dance$Type=="Swg","Swing", ifelse(dance$Type=="Ldy", "Lindy", NA )) - Кроме того, я бы рассмотрел возможность использования таблицы поиска в качестве другой возможности - stackoverflow.com/questions/18456968/   -  person thelatemail    schedule 23.11.2015


Ответы (2)


Если Type является фактором, вы можете переименовать уровни и извлечь их таким образом (используя f ниже):

f <- factor(c("Swg", "Ldy", "Blue", "Swg"))
# See the order of the levels by printing f. It's alphabetical
levels(f) <- c("Blues", "Lindy", "Swing")
as.character(f)

Это даст

> f <- factor(c("Swg", "Ldy", "Blue", "Swg"))
> f
[1] Swg  Ldy  Blue Swg 
Levels: Blue Ldy Swg
> as.character(f)
[1] "Swg"  "Ldy"  "Blue" "Swg" 
> levels(f) <- c("Blues", "Lindy", "Swing")
> as.character(f)
[1] "Swing" "Lindy" "Blues" "Swing"
person ekstroem    schedule 22.11.2015

Спасибо за вашу помощь. Я понял это с помощью советов, которые были упомянуты. Мне нужно было назвать фрейм данных и дать альтернативное решение для данных, которые не изменились. Я придумал:

Dance$new<-ifelse(dance$Type=="Swg","Swing", 
ifelse(dance$Type=="Ldy","Lindy",
ifelse(dance$Type=="Blue","Blues",
ifelse(dance$Type=="Contra","Contra",F))))
person Vixxen81    schedule 26.11.2015