我在dummies包中使用R dummy.data.frame函数来为我的因子的k级创建虚拟变量。不幸的是,我的因素有NA。当我使用dummy.data.frame时,它会创建没有NA的k个虚拟对象和一个新的虚拟对象,其中标记缺失值为1。 但是,我想在k个假人中仍然有NA,而不是缺失值的假人。
这个功能可以吗?你知道其他任何可以帮助我的功能吗?
答案 0 :(得分:4)
我通常使用model.matrix()
来做这类事情。使用选项na.action设置为pass将其保留在正确的位置。此选项似乎不会更改函数dummy()
的行为,因此使用model.matrix()
可能是您最简单的选择。例如,对于单个因子字母,以下应该可以解决这个问题:
options(na.action="na.pass")
letters <- c( "a", "a", "b", "c", "d", "e", "f", "g", "h", "b", "b", NA )
model.matrix(~letters-1)
或者对于数据框的几个变量或列:
letters <- c( "a", "a", "b", "c", "d", "e", "f", "g", "h", "b", "b", NA )
betters <- c( "a", "a", "c", "c", "c", "d", "d", "d", NA, "e", "e", "e" )
model.matrix(~letters+betters-1)
这里的重要技巧实际上是设置选项na.action。在进行虚拟重新编码之后,最好将选项恢复为默认值:
options(na.action="na.omit")