从多个虚拟变量中创建一个具有多个可能表现形式的分类变量

时间:2017-06-16 15:57:21

标签: r

我有一个包含多个虚拟变量的data.frame。它们属于不同的类别,比如颜色和形状。因此,一个假人可能被称为“红色”,另一个“椭圆”等等。最终,我想将这些类别相互映射以找到依赖关系。要做到这一点,首先我必须从几个虚拟变量中创建分类变量。还必须允许这些变量同时呈现多个表现形式(例如,一个对象可能不仅仅有一种颜色,而是两种或三种颜色)。

其次,我想知道是否有办法在一个虚拟变量中组合多个虚拟变量,而不是添加它们,但是当至少有一个值≠0时,只显示“1”。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这样的东西?

red <- c(1,1,0,0,1,1)
green <- c(0,0,1,1,0,1)
blue <- c(0,0,0,1,1,1)
df <- data.frame(red,green,blue)
df
##   red green blue
## 1   1     0    0
## 2   1     0    0
## 3   0     1    0
## 4   0     1    1
## 5   1     0    1
## 6   1     1    1

如果你想能够将它们组合起来,它会变得有点混乱......

df$redtxt <- ifelse(red==1,"Red","")
df$greentxt <- ifelse(green==1,"Green","")
df$bluetxt <- ifelse(blue==1,"Blue","")
df$all_colors <- with(df, paste0(redtxt,greentxt,bluetxt))

df
##   red green blue redtxt greentxt bluetxt   all_colors
## 1   1     0    0    Red                           Red
## 2   1     0    0    Red                           Red
## 3   0     1    0           Green                Green
## 4   0     1    1           Green    Blue    GreenBlue
## 5   1     0    1    Red             Blue      RedBlue
## 6   1     1    1    Red    Green    Blue RedGreenBlue

...但您需要的所有信息都在df$all_colors

对于你的第二个问题,有很多方法可以达到目标,但这可行...

buncha_dummies <- data.frame(x1=c(0,0,0,1,1),x2=c(0,1,0,1,0),x3=c(0,0,0,0,1))
buncha_dummies$ANY_1 <- with(buncha_dummies, 1*(x1==1 | x2==1 | x3==1))
buncha_dummies
##   x1 x2 x3 ANY_1
## 1  0  0  0     0
## 2  0  1  0     1
## 3  0  0  0     0
## 4  1  1  0     1
## 5  1  0  1     1