У меня есть формула и фрейм данных, и я хочу извлечь 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