ef650535fee3fb1be1afb5e43755353e.png

在数据集中,列变量中常常会有缺失值、离群值等异常值,我们需要快速查找这些异常值;

在进行数据可视化时,有时也需要按数据大小排序,然后进行绘图。

这时就需要用到行排序,按数据的升序、降序排列可以快速找到一列数值的极值。

dplyr包是数据处理很强大的一个包,包中的arrange()函数可以对数据进行排序。

1. 数据准备

1.1 创建数据集

创建三个向量,并生成一个简单数据集。

x1 1,2), times = 4) # 生成一列重复数字c(1,2)4次的向量
x2 8, mean = 2, sd = 2)  # 生成一列均值为2,标准差为2的数字向量
x3 1,6,8,4,NA,6,7,NA) # 向量中有2个缺失值
newdata # 生成数据框
newdata  # 查看数据框
902760efc767d690b05f2f084c9f1ab8.png

1.2 数据准备

install.packages("dplyr") # 安装包
library(dplyr) # 加载包

mydata # 转换数据集类型
mydata
4e8d1525f81f7ff307169830b6ba3e3c.png

2. arrange()函数介绍

arrange()函数接受一个数据框和一组作为排序依据的列名(或者更复杂的表达式)作为参数,具体用法为arrange(data, vars1,vars2,...),如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序。

arrange(.data,  # tibble类型的数据框
        ...,  # 输入不加引号的列变量名称,用逗号分开;或者包含列变量名的表达式
        # 默认升序排列,使用desc()函数进行降序排列
        .by_group = FALSE) # 为TRUE,则首先根据分组变量进行排序

3. 具体用法

  1. 升序排列
arrange(mydata, x1)   # x1按升序排列 
e4d251c5a1eaff22bf84178c6b91b6c0.png
arrange(mydata, x1, x3)  # 先按x1升序排列,再按x3升序排列
852d37eb7b4b61351e9d2e2d8d610a67.png
  1. 降序排列
arrange(mydata, desc(x1))  # x1按降序排列
4aefd74294d28972b89f37425954b157.png
arrange(mydata, desc(x1), desc(x3))  # 先按x1降序排列,再按x3降序排列
5c1d4ac84ca9bcf2631bfc47b610a8e5.png
arrange(mydata, desc(x1), x3)  # 先按x1降序排列,再按x3升序排列
6ab4ff07c39ecf6c4a13dc234d3233b3.png

两个变量以上的联合排序适合分组变量,两个以上的纯连续变量联合排序只会根据第一个连续变量排序。

  1. 缺失值排序
arrange(mydata, x3) 
arrange(mydata, desc(x3))  
75612b41dc0b5bfe05eb26f5f38889e3.png

与使用sort()进行基本排序不同,不管使用升序还是降序,缺失值总是排在最后面

那么怎么把缺失值排前面了?

arrange(mydata, desc(is.na(x3)))
594e83e392954450b498f24b3c066b1f.png
arrange(mydata, desc(is.na(x3)), x3)
ba1d634f62abb72c36868c7f4ff6d9c5.png

5. 其他函数

同filter()行筛选函数一样,也有arrange_all()arrange_at()arrange_if()三个函数使行排序功能更加强大。

5.1 arrange_all()函数

arrange_all(.tbl, .funs = list(), ..., .by_group = FALSE)

选择数据集的所有列进行行排序。

arrange_all(mydata) # 选择所有列升序
arrange_all(mydata, desc) # 降序

5.2 arrange_if()函数

arrange_if(.tbl, .predicate, .funs = list(), ..., .by_group = FALSE)

.predicate参数:通过逻辑向量判断哪些列参与行排列,然后根据列进行行排序。

5.3 arrange_at()函数

arrange_at(.tbl, .vars, .funs = list(), ..., .by_group = FALSE)

可以通过.vars参数来指定哪些列进行行排序;

将包含列名称的字符型向量,列位置的数字型向量或NULL传递给.vars参数。

arrange_at(mydata, vars(x1,x2))
# 指定x1和x2进行升序排列
arrange_at(mydata, vars(1,2))
# 指定第1列和第2列进行升序排列
arrange_at(mydata, vars(1:2), list(~desc(.)))
# 指定第1列和第2列进行降序排列

参考资料:《R数据科学》2018


既往专辑

fe05582c37fb7682008988a46cfeadd2.png

468e7da1992aeb78e1316dda3b389a5c.png

e31b3d9d7ce4304f9826af660c2edb00.png

3957be9a7fb2bf607b147059ecbca06c.png

572f11b971160865b45619197c7c0f0a.png

15f9606bb994633cb4eb8abaa5447712.png

f3009a2f5dc57d191fb06359fa8183d8.png

84e72a20d49009424c7693f6e22060e9.png

421fd8cbe9913e0dcd923f1630d9c33f.png

喜欢点个在看哦!
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐