R:将多个布尔列折叠成单个属性列,每个组合都有新行
R: Collapse multiple boolean columns into single attribute column with new rows for each combination
尝试将具有多个布尔列的数据框融合或折叠成一个两列数据库,其中包含一个 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
提前致谢!
在基数 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
尝试将具有多个布尔列的数据框融合或折叠成一个两列数据库,其中包含一个 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
提前致谢!
在基数 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