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 0 1 0 0
7 ex7 1 0 0 0
8 ex8 0 1 0 0
9 ex9 0 0 1 0
10 ex10 1 0 0 0
i need to have it as a single factor list like:
A Type
ex1 S1
ex2 S2
ex3 S3
ex4 S1
ex5 S4
ex6 S2
ex7 S1
ex8 S2
ex9 S3
ex10 S1
anybody help my problem?
Assuming d
is the data, the new column could be obtained with
d$type <- names(d[-1])[apply(d[-1] == 1, 1, which)]
d[c(1, 6)]
# 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
You can use apply
and check the max in the columns 2-5 and then return the corresponding column name:
df$Type <- apply(df[2:5], 1, function(x) names(df)[which.max(x)+1] )
Afterwards, you can delete the columns you don't need anymore:
df <- df[,-c(2:5)]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With