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

12

我有一个变量,叫做gender,具有二元类别值"female"/"male"。我想将其类型更改为整数0/1,以便在回归分析中使用。即,我希望值"female"和"male"被映射为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

我希望将性别变量类型转换为整型值1,以便在查询元素时得到该值。

> gender[1]
[1] 1

欢迎来到SO!也许最好展示一下你尝试过什么。 - agstudy
7
gender <- ifelse(gender=="female",1,0)的意思是:如果gender变量等于“female”,则将其赋值为1,否则赋值为0。 - Zahra
3个回答

15

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

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

as.factor(test)
#[1] male   female
#Levels: female male

参考组(1)将返回女性,比较组(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

2
或者,为了更明确地查看水平在回归模型中的处理方式,请使用“contrasts(factor(test))”。 - Marius

14

将变量转换为因子类型,让 R 来处理剩下的工作。在使用 R 时,您不应该需要明确创建虚拟变量。


6
更好的做法是解决真正的问题,而不是只解决表面问题! - mnel
1
@Dason,如果您想在相关矩阵中包含性别信息怎么办?如果性别是一个因素,这是行不通的。 - Kevin T

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接