【问题标题】:Creating dummy variables (n-1) categories创建虚拟变量 (n-1) 类别
【发布时间】:2019-05-19 03:27:54
【问题描述】:

我找到了类似的条目,但不是我想要的。对于两个分类变量(例如,gender(1,2)),我需要创建一个虚拟变量,0s 是男性,1s 是女性。

这是我的数据的样子和我做了什么。

 data <- as.data.frame(as.matrix(c(1,2,2,1,2,1,1,2),8,1))
  V1
1  1
2  2
3  2
4  1
5  2
6  1
7  1
8  2 
library(dummies)
data <- cbind(data, dummy(data$V1, sep = "_"))
   > data
  V1 data_1 data_2
1  1      1      0
2  2      0      1
3  2      0      1
4  1      1      0
5  2      0      1
6  1      1      0
7  1      1      0
8  2      0      1

在这段代码中,第二个类别也是(0,1)。另外,有没有办法确定基线(将 0 分配给任何类别)?

我希望它看起来像这样:

   > data
  V1     V1_dummy
1  1      0 
2  2      1 
3  2      1 
4  1      0 
5  2      1  
6  1      0  
7  1      0  
8  2      1 

另外,我想将其扩展到三个类别变量,在重新编码后具有两个类别 (n-1)。

提前致谢!

【问题讨论】:

  • 我想我不明白您要寻找的最终结果是什么。 data 是这样的吗?您正在寻找更好的编程方式吗?如果不是,它应该是什么样子?三个类别会是什么样子?
  • 抱歉,我现在添加了数据的外观。对于一个二分类变量,我只需要一个代表一个类别的虚拟列。对于三类变量,我需要两个虚拟变量,将第三类作为基线/比较类。
  • 不完全确定我理解,你只想要 1,0 编码变量吗?如果是这样,您可以使用ifelse() 按照您描述的方式创建它们。例如,如果男性为 2,女性为 1:data$female &lt;- ifelse(data$V1 == 2, 0, V1) 另外,如果您还没有,请查看 R 中的因子。

标签: r categories dummy-variable


【解决方案1】:

您可以通过以下方式使用model.matrix。一些具有三级因子的样本数据:

set.seed(1)
(df <- data.frame(x = factor(rbinom(5, 2, 0.4))))
#   x
# 1 0
# 2 1
# 3 1
# 4 2
# 5 0

然后

model.matrix(~ x, df)[, -1]
#   x1 x2
# 1  0  0
# 2  1  0
# 3  1  0
# 4  0  1
# 5  0  0

如果要指定哪个组消失,我们需要重新排列因子水平。这是第一个消失的群体。所以,例如,

levels(df$x) <- c("1", "0", "2")
model.matrix(~x, df)[, -1]
#   x0 x2
# 1  0  0
# 2  1  0
# 3  1  0
# 4  0  1
# 5  0  0

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2018-04-06
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多