数式とデータ フレームがあり、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