Автоматические фиктивные переменные в R - PullRequest
1 голос
/ 23 февраля 2012

У меня есть следующий фрейм данных, который создан ниже:

temp <- as.data.frame(with(uadm, table(prlo_state_code)))

Я хочу создать 11 фиктивных переменных. Один для каждой из лучших 10 и «другой». Топ 10 можно легко найти с помощью:

#top10
temp <- temp[order(temp$Freq, decreasing=T),]
head(temp, n=10)

Я знаю, что R - это замечательно, поэтому я предполагаю, что существует простое автоматическое создание (и именование) фиктивных переменных из первой десятки и сворачивание остальных в финальный манекен с именем 'other'.

Заранее спасибо за любую помощь или понимание.

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Вам редко нужны фиктивные переменные - R автоматически создает их для вас.

Если вы просто хотите собрать все классы, которые не входят в топ-10, вы можете просто использовать ifelse и %in%.

x <- sample( LETTERS, 1e4, replace=TRUE, p=runif(26) )
top10 <- names( sort(table(x), decreasing=TRUE)[1:10] )
y <- ifelse( x %in% top10, as.character(x), "Rest" )
table(y)

Если вам абсолютно необходимы фиктивные переменные, вы можете создать их с помощью model.matrix.

model.matrix(~y) 
3 голосов
/ 23 февраля 2012

Регрессионные функции R будут составлять необходимые столбцы в model.matrix, когда в формулу введена переменная-фактор. Контраст по умолчанию находится между первым уровнем фактора и каждым другим уровнем, так называемыми «контрастами лечения». Возможны другие варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...