Превращение бинарных dummy variables — обратно в номинативную в R

Давненько сюда ничего не писал, но видимо, снова начну.

В R порой довольно часто встречающиеся задачи не имеют готовой функции. Ну или я так плохо гуглю, что мне её не удаётся найти. Довольно часто для технических задач необходимо превратить номинативную шкалу в набор «dummy variables».

Как вы провели это лето?
Хорошо
Хорошо
Хорошо
Нормально
Плохо

превращается в

Провёл.лето.хорошо Провел.лето.нормально Провел.лето.плохо
1 0 0
1 0 0
1 0 0
0 1 0
0 0 1

Однако иногда возникает задача обратная — вернуть всё как было. Например, в моём случае, люди ставили галочки в полях анкеты в Excel, что кодировалось в итоге именно в такие переменные. Но при этом галочку они ставили только одну, в одно поле.

Я не нашёл такой готовой функции, так что пришлось писать своё. Функция использует команду melt из пакета reshape

undummy <-function(data) { data$q287328j<-seq(1:nrow(data)) data2<-melt(data,id=c("q287328j")) data3<-data2[which(data2$value==1),] data4<-aggregate(variable~q287328j,data=data3,paste) data5<-merge(data,data4,by="q287328j",all.x=TRUE) as.character(data5$variable) }

На вход подаётся data.frame, состоящий из dummy variables.
На выходе переменная типа character, содержащая перекодированные данные (имена dummy variables, которые были отмечены единичками).
Замечание 1: если не было ни одной единички в строке, то значение ячейки будет NA
Замечание 2: если было больше одной единички в строке, то значение ячейки будет вектором из имён отмеченных переменных

About the Author: Владимир Волохонский
Владимир Волохонский - психолог, выпускник факультета психологии СПбГУ, с 2002 по 2011 преподавал там же дисциплины "Математические методы в психологии", "Дизайн психологического исследования", "Психометрия" и др. С 2011 года - индивидуальный предприниматель.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *