11

我有一个变量,称为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

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

> gender[1]
[1] 1
4

3 回答 3

15

作为@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 所说, usingcontrasts将向您展示它在回归模型中的工作方式:

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

contrasts(factor(test,levels=c("male","female")))
#       female
#male        0
#female      1
于 2013-02-21T05:10:39.317 回答
14

转换为一个因子,让 R 处理剩下的事情。在使用 R 时,您永远不必考虑显式创建虚拟变量。

于 2013-02-21T05:04:02.427 回答
7

如果你真的这样做,你绝对应该听从@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"

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

于 2013-02-21T05:18:32.633 回答