Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.1k views
in Technique[技术] by (71.8m points)

r - Sort data by row

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 transposed before it is recombined with the Id column.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...