创建虚拟变量 (n-1) 类别
Creating dummy variables (n-1) categories
我找到了类似的条目,但不完全是我想要的。对于两个分类变量(例如,性别(1,2)),我需要创建一个虚拟变量,0 为男性,1 为女性。
这里是我的数据的样子和我做了什么。
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)。
提前致谢!
您可以通过以下方式使用model.matrix
。一些具有三级 factor:
的示例数据
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
我找到了类似的条目,但不完全是我想要的。对于两个分类变量(例如,性别(1,2)),我需要创建一个虚拟变量,0 为男性,1 为女性。
这里是我的数据的样子和我做了什么。
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)。
提前致谢!
您可以通过以下方式使用model.matrix
。一些具有三级 factor:
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