Ответ 1
dd <- read.table(text="
RACE AGE.BELOW.21 CLASS
HISPANIC 0 A
ASIAN 1 A
HISPANIC 1 D
CAUCASIAN 1 B",
header=TRUE)
with(dd,
data.frame(model.matrix(~RACE-1,dd),
AGE.BELOW.21,CLASS))
## RACEASIAN RACECAUCASIAN RACEHISPANIC AGE.BELOW.21 CLASS
## 1 0 0 1 0 A
## 2 1 0 0 1 A
## 3 0 0 1 1 D
## 4 0 1 0 1 B
Формула ~RACE-1
указывает, что R должен создавать фиктивные переменные из переменной RACE
, но подавлять перехват (чтобы каждый столбец представлял, относится ли наблюдение к определенной категории); по умолчанию, без -1
, заключается в том, чтобы сделать первый столбец термином перехвата (все), опуская фиктивную переменную для базового уровня (первый уровень фактора) из модельной матрицы.
В общем, вам может понадобиться что-то вроде
dd0 <- subset(dd,select=-CLASS)
data.frame(model.matrix(~.-1,dd0),CLASS=dd$CLASS)
Обратите внимание, что когда у вас есть несколько категориальных переменных, вам придется кое-что немного сложнее, если вы хотите, чтобы для каждого из них были полные наборы фиктивных переменных. Я бы подумал об объединении отдельных матриц модели, но я думаю, что там тоже есть трюк за все это сразу, что я забыл...