将多个布尔列合并为单个属性列,并为每个组合创建新行

6
尝试将具有多个布尔列的数据框融合或折叠成一个包含ID列和折叠值列的二列数据库,但每个值都会导致新行。
示例开头:
      A S1 S2 S3 S4
1   ex1  1  0  0  0
2   ex2  0  1  0  0
3   ex3  0  0  1  0
4   ex4  1  1  0  0
5   ex5  0  1  0  1
6   ex6  0  1  0  0
7   ex7  1  1  1  0
8   ex8  0  1  1  0
9   ex9  0  0  1  0
10 ex10  1  0  0  0

期望的输出:

A   Type
ex1 S1
ex2 S2
ex3 S3
ex4 S1
ex4 S2
ex5 S2
ex5 S4
ex6 S2
ex7 S1
ex7 S2
ex7 S3
ex8 S2
ex8 S3
ex9 S3
ex10 S1

提前感谢您!

1个回答

4

在基本 R 中:

 subset(cbind(A=dat[,1],stack(dat[-1])),values==1,-2)
      A ind
1   ex1  S1
4   ex4  S1
7   ex7  S1
10 ex10  S1
12  ex2  S2
14  ex4  S2
15  ex5  S2
16  ex6  S2
17  ex7  S2
18  ex8  S2
23  ex3  S3
27  ex7  S3
28  ex8  S3
29  ex9  S3
35  ex5  S4

在tidyverse中:
library(tidyverse)
dat%>%
   gather(Type,j,-A)%>%
   filter(j==1)%>%
   select(-j)
      A Type
1   ex1   S1
2   ex4   S1
3   ex7   S1
4  ex10   S1
5   ex2   S2
6   ex4   S2
7   ex5   S2
8   ex6   S2
9   ex7   S2
10  ex8   S2
11  ex3   S3
12  ex7   S3
13  ex8   S3
14  ex9   S3
15  ex5   S4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接