gpt4 book ai didi

r - model.matrix() 与 na.action=NULL?

转载 作者:行者123 更新时间:2023-12-03 07:36:25 24 4
gpt4 key购买 nike

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

最佳答案

Joris 的建议有效,但更快、更简洁的方法是通过全局 na.action 设置。 “通过”选项实现了我们从原始数据集中保留 NA 的目标。

选项 1:通过

结果矩阵将在与原始数据集相对应的行中包含 NA。

options(na.action='na.pass')
model.matrix(ff, dat)

选项 2:省略

结果矩阵将跳过包含 NA 的行。

options(na.action='na.omit')
model.matrix(ff, dat)

选项 3:失败

如果原始数据包含NA,则会出现错误。

options(na.action='na.fail')
model.matrix(ff, dat)

当然,更改全局选项时请务必小心,因为它们可能会改变代码其他部分的行为。谨慎的人可能会将原始设置存储为 current.na.action <- options('na.action') 之类的内容。 ,然后在制作model.matrix后将其改回来。

关于r - model.matrix() 与 na.action=NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com