【发布时间】:2012-09-27 07:23:10
【问题描述】:
我有一个变量是一个因素:
$ year : Factor w/ 8 levels "2003","2004",..: 4 6 4 2 4 1 3 3 7 2 ...
我想创建 8 个虚拟变量,命名为“2003”、“2004”等,根据变量“year”的值取值 0 或 1。我能想到的最接近的是
dt1 <- cbind (dt1, model.matrix(~dt1$year - 1) )
但这会带来不幸的后果
- 虚拟变量命名为 dt1$year2003,而不仅仅是“2003”、“2004”等
-
model.matrix似乎完全省略了 NA 行(因此,当year变量中存在 NA 时,上述命令由于长度不同而失败。
当然,我可以用更多代码解决这些问题,但我希望我的代码尽可能简洁(在合理范围内),所以如果有人能提出更好的方法来制作虚拟变量,我将不胜感激。
【问题讨论】:
-
我认为你不能在
R:cran.r-project.org/doc/manuals/…中拥有以数字开头的变量名 -
通常情况下,您不会自己创建一个假人,而是在模型中使用类“因子”的变量,因此适合模型的函数将从因子构造模型矩阵。如果您需要它们,您可以从模型矩阵中提取假人。
-
@Glen_b 谢谢 - 这是有用的信息,这意味着我可以运行一个模型,例如
glmer(y~x + (year + 1|school)....where year 而不是编码虚拟变量并运行glmer(y~x + (y1+y2+y3+y4+y5+y6+y7+y8 + 1|school)....并获得相同的输出? -
治疗对比是 R 中分类变量的默认设置。
-
@smillig:在 R 中,变量名可以以数字和下划线开头,但应适当引用。
标签: r