将非互斥指标变量与dplyr相结合

将非互斥指标变量与dplyr相结合,r,dplyr,R,Dplyr,我有一个如下所示的数据帧: x = data.frame(a=c(1,2,3,4), b = c("g1","g2","g3","g4"), dummy_1 = c(1,1,1,0), dummy_2 = c(0,0,1,1)) a b dummy_1 dummy_2 1 g1 1 0 2 g2 1 0 3 g3 1 1 4 g4 0 1 我想修改我的数据框,以便在指示器变量重叠

我有一个如下所示的数据帧:

 x = data.frame(a=c(1,2,3,4), b = c("g1","g2","g3","g4"), 
 dummy_1 = c(1,1,1,0), dummy_2 = c(0,0,1,1))

 a  b dummy_1 dummy_2
 1 g1       1       0
 2 g2       1       0
 3 g3       1       1
 4 g4       0       1
我想修改我的数据框,以便在指示器变量重叠时添加重复的行。并将所有指标变量合并到一列中。我希望我的数据框最终看起来像这样

a b  dummy 
1 g1 dummmy_1       
2 g2 dummmy_1       
3 g3 dummmy_1  
3 g3 dummmy_2       
4 g4 dummmy_2       

复制行然后以这种方式组合指标变量的最佳方法是什么?我尝试过使用
unite()
,但在制定复制数据帧中的行的条件时遇到了一些问题

我们
收集成“long”格式,然后
过滤出“val”中为零的元素,然后
选择相关列

library(tidyerse)
gather(x, dummy, val, dummy_1:dummy_2) %>% 
       filter(val!=0) %>%
       select(-val)
# a  b   dummy
#1 1 g1 dummy_1
#2 2 g2 dummy_1
#3 3 g3 dummy_1
#4 3 g3 dummy_2
#5 4 g4 dummy_2
您也可以尝试:

df <- reshape2::melt(x, id.vars = c("a","b"))

df[df$value == 1, c("a","b","variable")]
#  a  b variable
#1 1 g1  dummy_1
#2 2 g2  dummy_1
#3 3 g3  dummy_1
#7 3 g3  dummy_2
#8 4 g4  dummy_2

df谢谢!重塑2是tidyverse的一部分还是独立的?@AjjitNarayanan我不认为它是由
库(tidyverse)
加载的,但它是由Hadley编写的。