详解《R数据科学》--插播dplyr习题
2018-09-08 本文已影响380人
小洁忘了怎么分身
P42页习题3.2.4,对应英文版5.2.4
1.找出满足以下条件的所有航班
a.到达时间延误两小时及以上
?flights
![](https://img.haomeiwen.com/i9475888/424da8736f36f763.png)
从帮助文档得知,到达时间延误是arr_delay,单位是分钟。
filter(flights, arr_delay >= 120)
b.飞往休斯顿(IAH 或 HOU机场)
根据目的地(destination)即表中的dest筛选
filter(flights, dest =="IAH"| dest =="HOU")
filter(flights, dest %in% c("IAH", "HOU"))#简单写法
c.由 United, American, Delta(航空公司)运营
![](https://img.haomeiwen.com/i9475888/0f5aeed57a81592f.png)
由帮助信息得知,航空公司与缩写的对应关系在arilines里。
View(airlines)
![](https://img.haomeiwen.com/i9475888/9f0016cfab6170cd.png)
filter(flights,carrier %in% c("AA","DL","UA"))
d.7-9月出发的航班
filter(flights, month >= 7, month <= 9)
filter(flights, month >= 7&month <= 9)
filter(flights, month %in% c(7:9))
filter(flights, month %in% c(7,8,9))
e.到达延误两小时及以上,但出发没有延误
filter(flights, arr_delay>=60&dep_delay == 0)
filter(flights, arr_delay>=60,dep_delay == 0)
f.起飞延误至少1h,但飞行过程弥补回30min的航班
小洁分析:如果飞行时间完全按照计划的话,到达延误和起飞延误时间应该是一样的。所以后半句话的意思是到达延误时间比起飞延误时间小30min。
但我疑虑的是正好弥回30min还是30min以上呢?
查阅了标准答案是:
filter(flights,dep_delay>=60,arr_delay<=dep_delay-30)
根据答案判断,题目的应该是表达飞行过程弥补回30min以上。如果按照正好30min算的话应该是
filter(flights,dep_delay>=60,arr_delay==dep_delay-30)
g.起飞时间在0-6点之间。(包括0和6)
小洁分析:查了一下起飞时间的格式是HHMM或HMM,那0-6点就是<=600。问题是0点会表示为000还是2400呢,试一下:
![](https://img.haomeiwen.com/i9475888/b66aa119ee32d1e9.png)
因此零点的表示应该是2400
filter(flights, dep_time <= 600 | dep_time == 2400)
2.between函数
between(x, left, right)
等价于x >= left & x <= right
。
因此上一题的d可使用:
filter(flights, between(month, 7, 9))
3.有多少航班缺失了dep_time?其他列的缺失情况如何?这样的行表示什么情况?
count(flights, is.na(dep_time))
filter(flights, is.na(dep_time))
没有起飞时间、也没有到达时间,只有计划的数据,所以这些航班是被取消掉了~
4.NA奇怪的逻辑和规律
(1)Why is NA ^ 0 not missing?
任何数的零次方都是1
(2)Why is NA | TRUE not missing? Why is FALSE & NA not missing?
- 任何数|TRUE都是TURE
- 任何数&FALSE都是FALSE
ps:NA | FALSE 和 NA & TRUE 都是NA。NA在逻辑计算中表示:不知道TRUE还是FALSE。
(3)任何数x0都是0,为什么NAx0却等于NA?
↓此处是我偷窥了答案。
因为x∞和 x−∞ 没有被定义。R将没有被定义的结果返回为NaN,也就是 not a number的缩写。
Inf * 0 #inf是正无穷
#> [1] NaN
-Inf * 0 #-inf是负无穷
#> [1] NaN