将具有2个级别的因子转换为R中的二进制值0/1

时间:2013-02-21 05:00:42

标签: r binary r-factor

我有一个名为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

3 个答案:

答案 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)