我有一个公式和一个数据框,我想提取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