У меня есть формула и фрейм данных, и я хочу извлечь model.matrix()
. Однако мне нужно, чтобы полученная матрица включала NA, найденные в исходном наборе данных. Если бы я использовал model.frame()
для этого, я бы просто передал его na.action=NULL
. Однако вывод, который мне нужен, имеет формат model.matrix()
. В частности, мне нужны только правые переменные, мне нужно, чтобы выходные данные были матрицей (а не фреймом данных), и мне нужно, чтобы факторы были преобразованы в ряд фиктивных переменных.
Я уверен, что мог бы что-то взломать, используя петли или что-то в этом роде, но мне было интересно, кто-нибудь может предложить более чистый и эффективный обходной путь. Большое спасибо за ваше время!
А вот пример:
dat <- data.frame(matrix(rnorm(20),5,4), gl(5,2))
dat[3,5] <- NA
names(dat) <- c(letters[1:4], 'fact')
ff <- a ~ b + fact
# This omits the row with a missing observation on the factor
model.matrix(ff, dat)
# This keeps the NA, but it gives me a data frame and does not dichotomize the factor
model.frame(ff, dat, na.action=NULL)
Вот что я хотел бы получить:
(Intercept) b fact2 fact3 fact4 fact5
1 1 0.7266086 0 0 0 0
2 1 -0.6088697 0 0 0 0
3 NA 0.4643360 NA NA NA NA
4 1 -1.1666248 1 0 0 0
5 1 -0.7577394 0 1 0 0
6 1 0.7266086 0 1 0 0
7 1 -0.6088697 0 0 1 0
8 1 0.4643360 0 0 1 0
9 1 -1.1666248 0 0 0 1
10 1 -0.7577394 0 0 0 1