model .matrix () с na.action = NULL?

У меня есть формула и фрейм данных, и я хочу извлечь model.matrix () . Однако мне нужно, чтобы полученная матрица включала в себя НА, найденные в исходном наборе данных. Если бы я использовал для этого 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
36
задан smci 21 February 2017 в 05:52
поделиться