Reputation: 3020
I have a data frame like
Id A B C D E F
a 1 2 9 4 7 6
b 4 5 1 3 6 10
c 1 6 0 3 4 5
I want a data frame like
Id
a C E F D B A #for a, C has the highest value, then E then F and so on...similarly for other rows
b F E B A D C
c B F E D A C
Basically, i am sorting each row of the data frame first and then replacing row values by the respective column names.
Is there any nice way to do this?
Upvotes: 3
Views: 248
Reputation: 193507
Use order
with apply
, extracting the names
in the process, like this:
data.frame(
mydf[1],
t(apply(mydf[-1], 1, function(x)
names(x)[order(x, decreasing = TRUE)])))
# Id X1 X2 X3 X4 X5 X6
# 1 a C E F D B A
# 2 b F E B A D C
# 3 c B F E D A C
The result of apply
needs to be t
ransposed before it is recombined with the Id column.
Upvotes: 5