1.2 arrange()

arrange() 的工作方式与 filter() 非常相似,但它不是筛选行,而是改变行的顺序。它接受一个数据集和一组作为排序依据的列名(或者更复杂的表达式)作为参数,如果列名不止一个,那么就是用后面的列在前面排序的基础上继续排序:

如果想要按某列降序排列行,可以对该列名使用函数desc()

缺失值总是排在最后:

如果参数是一个关于某些列的表达式 expression(var),它的意思是告诉 arrange():“按照各行在这个表达式上的取值的从小到大的顺序排列观测

例如,我们希望找到总延误时间(dep_delay + arr_delay)最长的航班

如果A行在两个量上的取值是(2,5),B行是(1,10),B会出现在A后面,因为arrange()按照这个表达式来进行排列。

1.2.1 Exercises

Exercise 1.4 如何使用 arrange() 将缺失值排在最前面?(提示:使用is.na())
例:把 flights 数据集中dep_time上的 NA 值排在最前面( to sort the data frame by departure time (dep_time) in ascending order but NA values first)

首先is.na(dep_time)将把所有 NA 变为 TRUE (1),其他数值变成 FALSE (0),所以 desc(is.na(dep_time)) 是一个排序依据,它告诉 arrange(),把那些经过运算is.na(dep_time)后值大的行排在前面,即原先的 NA ; 之后,我们仍希望在那些不含 NA 的观测中按照 dep_time 排序,所以添加一个参数 dep_time

Exercise 1.5 flights 排序以找出延误时间最长的航班。找出出发时间最早的航班。
Exercise 1.6 flights 排序以找出速度最快的航班

这个排序条件需要用到表达式,速度 = distance / air_time