如何按字典顺序订购我的数据框 [英] How to order my dataframe lexicographicaly

查看:88
本文介绍了如何按字典顺序订购我的数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据框

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  3 10
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3

我想按字典顺序对整个数据框进行排序,以便输出(例如,列"c")应类似于

I want to sort whole data frame in lexicographical order, so that the output (for example, column "c") should be like

> a[,"c"]
[1] 1  2  3 10 11  X  Y

我尝试过,并且得到了不同的答案

I tried and I am geting different answer

indata <- a[do.call(order,a[,c("c","a","b")]),]
> indata[,"c"]
[1] 1  10 11 2  3  X  Y
Levels: 1 10 11 2 3 X Y

我尝试了gtools,mixedorder软件包,并且在一栏上运行良好:

I tried gtools, mixedorder package and worked fine on one column:

> a[mixedorder(a$c),]
  a  b  c
1 1  1  1
2 2  2  2
3 3  3 10
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3

但是如果我包含多个列,它将不起作用:

but it doesn't work if I include multiple columns:

> a[with(a,order(mixedorder(c),mixedorder(b),mixedorder(a))),]
  a  b  c
1 1  1  1
2 2  2  2
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3
3 3  3 10

虽然我期望的是:

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

推荐答案

一种选择是使用 gtools 软件包中的mixedorder().

One option is to use mixedorder() from the gtools package.

library(gtools)
a[mixedorder(a$c),]
#   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

这篇关于如何按字典顺序订购我的数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆