数据-R语言-图表-决策-Linux-Python

R语言ETL工程系列:排序(arrange)

2019-02-18  本文已影响9人  天善智能

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com

前言

上篇介绍如何从表中检索一个或多个数据列,本章介绍如何在R中对表格数据进行排序,主要使用arrange函数。

首先我们加载必要的包:

1library(tidyverse)

此外,我们会用到R语言自带的数据集mtcars。它本身是数据框格式的,我们会把它转化为tibble格式,并存放在mtcars1变量中。让我们审视一下本章要用到的数据集:

1mtcars%>%as_tibble()->mtcars1

2mtcars1

3## #Atibble: 32x11

4##mpgcyldisphpdratwtqsecvsamgearcarb

5##  *           

6##  1  21       6  160    110  3.92.6216.50     1     4     4

7##  2  21       6  160    110  3.92.8817.00     1     4     4

8##  3  22.84  108     93  3.852.3218.61     1     4     1

9##  4  21.46  258    110  3.083.2219.41     0     3     1

10##  5  18.78  360    175  3.153.4417.00     0     3     2

11##  6  18.16  225    105  2.763.4620.21     0     3     1

12##  7  14.38  360    245  3.213.5715.80     0     3     4

13##  8  24.44  147.    62  3.693.1920       1     0     4     2

14##  9  22.84  141.    95  3.923.1522.91     0     4     2

15## 10  19.26  168.   123  3.923.4418.31     0     4     4

16## # ...with22morerows

基于单列排序

通过审视数据,我们发现数据的排布是乱序的,没有按照一定的顺序展示出来。如果我们想要数据表根据mpg变量排序,那么就需要用arrange函数。

1mtcars1%>%

2arrange(mpg)

3## #Atibble: 32x11

4##mpgcyldisphpdratwtqsecvsamgearcarb

5##              

6##  1  10.48  472    205  2.935.2518.00     0     3     4

7##  2  10.48  460    215  3     5.4217.80     0     3     4

8##  3  13.38  350    245  3.733.8415.40     0     3     4

9##  4  14.38  360    245  3.213.5715.80     0     3     4

10##  5  14.78  440    230  3.235.3417.40     0     3     4

11##  6  15       8  301    335  3.543.5714.60     1     5     8

12##  7  15.28  276.   180  3.073.7818       0     0     3     3

13##  8  15.28  304    150  3.153.4417.30     0     3     2

14##  9  15.58  318    150  2.763.5216.90     0     3     2

15## 10  15.88  351    264  4.223.1714.50     1     5     4

16## # ...with22morerows

这样一来,我们发现数据mpg列已经从小到大进行了排列,而其他列也根据排列进行了调整。

相应的SQL代码如下:

1SELECT*

2FROM`mtcars`

3ORDERBY`mpg`

基于多列排序

有时候,我们需要根据多列进行排序。例如,我们数据如果有年月日的数据,我们需要表格先按照年排序,然后在年内再按照月份排序,月份中再根据日进行排序。

arrange函数中通过可以放入多列的名称来对多列进行排序,列名称之间需要以逗号相隔。比如,我们想要先对cyl进行排序,再对disp进行排序:

1mtcars1 %>%

2arrange(cyl,disp) %>%

3print(n = Inf)

4## # A tibble: 32 x 11

5##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb

6##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>

7##  1  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1

8##  2  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2

9##  3  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1

10##  4  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1

11##  5  30.4     4  95.1   113  3.77  1.51  16.9     1     1     5     2

12##  6  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1

13##  7  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1

14##  8  26       4 120.     91  4.43  2.14  16.7     0     1     5     2

15##  9  21.4     4 121     109  4.11  2.78  18.6     1     1     4     2

16## 10  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2

17## 11  24.4     4 147.     62  3.69  3.19  20       1     0     4     2

18## 12  19.7     6 145     175  3.62  2.77  15.5     0     1     5     6

19## 13  21       6 160     110  3.9   2.62  16.5     0     1     4     4

20## 14  21       6 160     110  3.9   2.88  17.0     0     1     4     4

21## 15  19.2     6 168.    123  3.92  3.44  18.3     1     0     4     4

22## 16  17.8     6 168.    123  3.92  3.44  18.9     1     0     4     4

23## 17  18.1     6 225     105  2.76  3.46  20.2     1     0     3     1

24## 18  21.4     6 258     110  3.08  3.22  19.4     1     0     3     1

25## 19  16.4     8 276.    180  3.07  4.07  17.4     0     0     3     3

26## 20  17.3     8 276.    180  3.07  3.73  17.6     0     0     3     3

27## 21  15.2     8 276.    180  3.07  3.78  18       0     0     3     3

28## 22  15       8 301     335  3.54  3.57  14.6     0     1     5     8

29## 23  15.2     8 304     150  3.15  3.44  17.3     0     0     3     2

30## 24  15.5     8 318     150  2.76  3.52  16.9     0     0     3     2

31## 25  13.3     8 350     245  3.73  3.84  15.4     0     0     3     4

32## 26  15.8     8 351     264  4.22  3.17  14.5     0     1     5     4

33## 27  18.7     8 360     175  3.15  3.44  17.0     0     0     3     2

34## 28  14.3     8 360     245  3.21  3.57  15.8     0     0     3     4

35## 29  19.2     8 400     175  3.08  3.84  17.0     0     0     3     2

36## 30  14.7     8 440     230  3.23  5.34  17.4     0     0     3     4

37## 31  10.4     8 460     215  3     5.42  17.8     0     0     3     4

38## 32  10.4     8 472     205  2.93  5.25  18.0     0     0     3     4

一般来说,tibble格式只会显示数据的前十行,如果我们想要看到全部数据,可以在最后运行print(n = Inf),这表示我们要看表格的所有行。但是对于行数过多的数据集不建议使用这个函数,本例因为需要看到排序效果,因此使用了这个操作。

相应的SQL代码如下:

1SELECT*

2FROM`mtcars`

3ORDERBY`cyl`, `disp`

降序排列

细心的你也许会观察到,我们的排序都是从小到大排列的,也称为升序排列。但是在实际应用中,很多时候会用到降序排列,这时候只需要对需要降序排列的列进行降序处理即可,具体函数为desc()。例子如下:

1mtcars1%>%

2arrange(desc(disp))

3## #Atibble: 32x11

4##mpgcyldisphpdratwtqsecvsamgearcarb

5##              

6##  1  10.48   472   205  2.935.2518.00     0     3     4

7##  2  10.48   460   215  3     5.4217.80     0     3     4

8##  3  14.78   440   230  3.235.3417.40     0     3     4

9##  4  19.28   400   175  3.083.8417.00     0     3     2

10##  5  18.78   360   175  3.153.4417.00     0     3     2

11##  6  14.38   360   245  3.213.5715.80     0     3     4

12##  7  15.88   351   264  4.223.1714.50     1     5     4

13##  8  13.38   350   245  3.733.8415.40     0     3     4

14##  9  15.58   318   150  2.763.5216.90     0     3     2

15## 10  15.28   304   150  3.153.4417.30     0     3     2

16## # ...with22morerows

我们可以看到,disp已经是从大到小进行排列了。

相应的SQL代码如下:

1SELECT*

2FROM`mtcars`

3ORDERBY`disp` DESC

复合操作

那么如果我们想要先以cyl进行升序排列,在这个基础上对disp进行降序排列应该怎么做呢?相信聪明的读者已经可以自己动手进行操作,代码如下:

1mtcars1 %>%

2arrange(cyl,desc(disp)) %>%

3print(n = Inf)

4## # A tibble: 32 x 11

5##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb

6##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>

7##  1  24.4     4 147.     62  3.69  3.19  20       1     0     4     2

8##  2  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2

9##  3  21.4     4 121     109  4.11  2.78  18.6     1     1     4     2

10##  4  26       4 120.     91  4.43  2.14  16.7     0     1     5     2

11##  5  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1

12##  6  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1

13##  7  30.4     4  95.1   113  3.77  1.51  16.9     1     1     5     2

14##  8  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1

15##  9  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1

16## 10  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2

17## 11  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1

18## 12  21.4     6 258     110  3.08  3.22  19.4     1     0     3     1

19## 13  18.1     6 225     105  2.76  3.46  20.2     1     0     3     1

20## 14  19.2     6 168.    123  3.92  3.44  18.3     1     0     4     4

21## 15  17.8     6 168.    123  3.92  3.44  18.9     1     0     4     4

22## 16  21       6 160     110  3.9   2.62  16.5     0     1     4     4

23## 17  21       6 160     110  3.9   2.88  17.0     0     1     4     4

24## 18  19.7     6 145     175  3.62  2.77  15.5     0     1     5     6

25## 19  10.4     8 472     205  2.93  5.25  18.0     0     0     3     4

26## 20  10.4     8 460     215  3     5.42  17.8     0     0     3     4

27## 21  14.7     8 440     230  3.23  5.34  17.4     0     0     3     4

28## 22  19.2     8 400     175  3.08  3.84  17.0     0     0     3     2

29## 23  18.7     8 360     175  3.15  3.44  17.0     0     0     3     2

30## 24  14.3     8 360     245  3.21  3.57  15.8     0     0     3     4

31## 25  15.8     8 351     264  4.22  3.17  14.5     0     1     5     4

32## 26  13.3     8 350     245  3.73  3.84  15.4     0     0     3     4

33## 27  15.5     8 318     150  2.76  3.52  16.9     0     0     3     2

34## 28  15.2     8 304     150  3.15  3.44  17.3     0     0     3     2

35## 29  15       8 301     335  3.54  3.57  14.6     0     1     5     8

36## 30  16.4     8 276.    180  3.07  4.07  17.4     0     0     3     3

37## 31  17.3     8 276.    180  3.07  3.73  17.6     0     0     3     3

38## 32  15.2     8 276.    180  3.07  3.78  18       0     0     3     3

相应的SQL代码如下:

1SELECT*

2FROM`mtcars`

3ORDERBY`cyl`, `disp` DESC

本章介绍了如何在R中完成排序操作,包括基于单列与多列的排序,以及升序与降序操作。在实际操作中,通过组合这些方法,我们能够对一个大的数据表格进行有层次的排序,是需要牢记的实用基本操作。

往期精彩:

R语言ETL工程系列:总论

R语言ETL工程系列:R语言基础设置

R语言中文社区2018年终文章整理(作者篇)

R语言中文社区2018年终文章整理(类型篇)

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战

回复 Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘

回复 人工智能     三个月入门人工智能

回复 数据分析师  数据分析师成长之路 

回复 机器学习     机器学习的商业应用

回复 数据科学     数据科学实战

回复 常用算法     常用数据挖掘算法

上一篇下一篇

猜你喜欢

热点阅读