my data frame look like this:
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 0 0 0
5 ex5 0 0 0 1
6 ex6
You could try:
If df
is the dataframe
data.frame(A=df$A, Type=rep(names(df)[-1], nrow(df))[!!t(df[,-1])])
A Type
1 ex1 S1
2 ex2 S2
3 ex3 S3
4 ex4 S1
5 ex5 S4
6 ex6 S2
7 ex7 S1
8 ex8 S2
9 ex9 S3
10 ex10 S1
Also:
names(df)[-1][t(df[-1])*seq_len(ncol(df)-1)]
[1] "S1" "S2" "S3" "S1" "S4" "S2" "S1" "S2" "S3" "S1"