【问题标题】:Converting a factor with 2 levels to binary values 0/1 in R [closed]将具有 2 个级别的因子转换为 R 中的二进制值 0/1 [关闭]
【发布时间】:2013-02-06 08:10:45
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 SO!也许它应该更好地展示你尝试过的东西。
  • gender <- ifelse(gender=="female",1,0) 呢?

标签: r binary r-factor


【解决方案1】:

作为@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

【讨论】:

  • 或者,要更明确地了解如何在回归模型中处理级别,contrasts(factor(test))
【解决方案2】:

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

【讨论】:

  • +1 更好地解决真正的问题,而不是确切的问题!
  • @Dason,如果你想在相关矩阵中包含性别呢?如果性别是一个因素,这将不起作用。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 2012-12-03
    • 2013-01-09
    • 2013-11-13
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多