How to order my dataframe lexicographicaly

后端 未结 4 861
北海茫月
北海茫月 2020-12-04 01:36

I have a following data frame

a = data.frame(a=c(1,2,3,4,5,6,7),b=c(1,2,3,10,12,21,4),c=c(1,2,10,11,\"X\",\"Y\",3))
> a
  a  b  c
1 1  1  1
2 2  2  2
3 3         


        
4条回答
  •  抹茶落季
    2020-12-04 02:04

    Unfortunately mixedsort does not (yet) support multiple column sorting. So, you need to implement it yourself, for example like this:

    a[order(sub("[0-9]+", "", a$c),
            as.numeric(sub("[[:alpha:]]*([[:digit:]]*)", '\\1', a$c)),
            as.numeric(a$b),
            as.numeric(a$a)), ]
    

    This first, alphanumerically sorts data.frame using a$c, and for tie situations(which actually does not exist in your data.frame 'a'), it uses a$b and a$a.

    Output is:

      a  b  c
    1 1  1  1
    2 2  2  2
    7 7  4  3
    3 3  3 10
    4 4 10 11
    5 5 12  X
    6 6 21  Y
    

    PS: This was written by David Winsemius in this post as a reply to a similar question.

提交回复
热议问题