我有一个名为gender
的变量,其二进制分类值为“female”/“male”。我想将其类型更改为整数0/1,以便我可以在回归分析中使用它。即我希望将值“女性”和“男性”映射到1和0。
> str(gender)
gender : Factor w/ 2 levels "female","male": 1 1 1 0 0 0 0 1 1 0 ...
> gender[1]
[1] female
我想转换性别变量类型,以便在查询元素时得到int值1,即
> gender[1]
[1] 1
答案 0 :(得分:14)
作为@Dason答案的补充,请注意......
test <- c("male","female")
as.factor(test)
#[1] male female
#Levels: female male
...将female
作为参考组(1)和male
作为比较组(2),
以另一种方式旋转它,你需要做...
factor(test,levels=c("male","female"))
#[1] male female
#Levels: male female
正如@marius所说,使用contrasts
将向您展示它在回归模型中的工作原理:
contrasts(as.factor(test))
# male
#female 0
#male 1
contrasts(factor(test,levels=c("male","female")))
# female
#male 0
#female 1
答案 1 :(得分:11)
转换为一个因子,让R负责其余的事情。在使用R时,您永远不必专注于显式创建虚拟变量。
答案 2 :(得分:6)
如果你真的这样做,你应该完全遵循@Dason的建议。我将假设您正在教授课程,并希望演示指标变量(感谢this question):
dat <- data.frame(gender=sample(c("male", "female"), 10, replace=TRUE))
model.matrix(~gender, data=dat)
(Intercept) gendermale
1 1 1
2 1 0
3 1 1
4 1 0
5 1 1
6 1 1
7 1 1
8 1 0
9 1 0
10 1 1
attr(,"assign")
[1] 0 1
attr(,"contrasts")
attr(,"contrasts")$gender
[1] "contr.treatment"
如果您不想拦截,请改用model.matrix(~gender -1 , data=dat)
。