Запись фиктивной переменной в упорядоченный множитель
Мне нужна помощь с кодирующими факторами для логистической регрессии.
У меня есть шесть фиктивных переменных, представляющих скобки дохода. Я хочу преобразовать их в единый упорядоченный фактор для использования в логистической регрессии.
Мой фрейм данных выглядит так:
INC1 INC2 INC3 INC4 INC5 INC6
1 0 0 1 0 0 0
2 NA NA NA NA NA NA
3 0 0 0 0 0 1
4 0 0 0 0 0 1
5 0 0 1 0 0 0
6 0 0 0 1 0 0
7 0 0 1 0 0 0
8 0 0 0 1 0 0
Как я хочу, чтобы это выглядело так:
INC
1 INC3
2 NA
3 INC6
4 INC6
5 INC3
6 INC4
7 INC3
8 INC4
Это должно быть обычной (и простой) операцией, но мои поиски не дали краткого ответа на вопрос, как выполнить эту перекодировку. Любая помощь очень ценится.
1 ответ
Решение
Вот решение, основанное на другом ответе, который сохраняет значения NA и преобразует их в упорядоченный коэффициент.
> inc
INC1 INC2 INC3 INC4 INC5 INC6
1 0 0 1 0 0 0
2 NA NA NA NA NA NA
3 0 0 0 0 0 1
4 0 0 0 0 0 1
5 0 0 1 0 0 0
6 0 0 0 1 0 0
7 0 0 1 0 0 0
8 0 0 0 1 0 0
> inc$F = factor(apply(inc, 1, function(x) names(x)[x == 1]),levels=names(inc),ordered=TRUE)
> inc
INC1 INC2 INC3 INC4 INC5 INC6 F
1 0 0 1 0 0 0 INC3
2 NA NA NA NA NA NA <NA>
3 0 0 0 0 0 1 INC6
4 0 0 0 0 0 1 INC6
5 0 0 1 0 0 0 INC3
6 0 0 0 1 0 0 INC4
7 0 0 1 0 0 0 INC3
8 0 0 0 1 0 0 INC4
> inc$F
[1] INC3 <NA> INC6 INC6 INC3 INC4 INC3 INC4
Levels: INC1 < INC2 < INC3 < INC4 < INC5 < INC6
Это сломается, если у вас более одного 1 в ряд.