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

use*_*989 8 binary r r-factor

我有一个变量,称为gender二进制分类值"女性"/"男性".我想将其类型更改为整数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
Run Code Online (Sandbox Code Playgroud)

我想转换性别变量类型,以便在查询元素时得到int值1,即

> gender[1]
[1] 1
Run Code Online (Sandbox Code Playgroud)

the*_*ail 14

作为@Dason答案的补充,请注意......

test <- c("male","female")

as.factor(test)
#[1] male   female
#Levels: female male
Run Code Online (Sandbox Code Playgroud)

...将female作为参考组(1)和male作为比较组(2)返回,

要以另一种方式旋转它,你需要做...

factor(test,levels=c("male","female"))
#[1] male   female
#Levels: male female
Run Code Online (Sandbox Code Playgroud)

正如@marius所说,使用contrasts将告诉你它如何在回归模型中起作用:

contrasts(as.factor(test))
#       male
#female    0
#male      1

contrasts(factor(test,levels=c("male","female")))
#       female
#male        0
#female      1
Run Code Online (Sandbox Code Playgroud)

  • 或者,更明确地看待如何在回归模型中处理水平,"对比(因素(测试))" (2认同)

Das*_*son 11

转换为一个因子让R负责其余的事情.使用R时,您永远不必处理显式创建虚拟变量的问题.

  • +1远远好于解决真正的问题,而不是确切的问题! (4认同)

seb*_*n-c 6

如果你真的这样做,你应该完全遵循@Dason的建议.我将假设您正在教授一个课程,并希望演示指标变量(感谢这个问题):

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"
Run Code Online (Sandbox Code Playgroud)

如果您不想要拦截,请model.matrix(~gender -1 , data=dat)改用.