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