(1)虽然现在的deep_time和sched_dep_time变量方便阅读,但不适合计算,因为他们实际上并不是连续型数值。将他们转换成一种更方便的表示形式,即从午夜开始的分钟数。
flight_new <-< span=""> mutate(flights, dep_time_min = (dep_time %/% 100 * 60 + dep_time %% 100) %% 1440, sched_dep_time_min = (sched_dep_time %/% 100 * 60 + sched_dep_time %% 100) %% 1440 )
#为避免代码冗余,可以构建一个函数 time2min <-< span=""> function(x){ (x %/% 100 * 60 + x %% 100) %% 1440 }
flight_new <-< span=""> mutate(flights, dep_time_min = time2min(dep_time), sched_dep_time_min = time2min(sched_dep_time) ) (2)比较air_time和arr_time - dep_time。你期望看到什么?实际又看到了什么?如何解决这个问题? 期望看到air_time等于arr_time - dep_time,但实际上air_time小于arr_time - dep_time,原因在于air_time不包括飞机在跑道滑行的时间和着陆滑行时间,专门指从起飞到进入着陆之间的时间。 (3)比较dep_time、sched_dep_time和dep_delay。你期望这三个数值之间具有何种关系? 期望出发延迟(dep_delay)等于预定出发时间(sched_dep_time)与实际出发时间(dep_time) 之间的差,即:dep_time - sched_dep_time = dep_delay 有一部分航班与期望有差异,可能是因为原定的航班在午夜之前出发,但在午夜之后推迟了。所有这些差异完全等于1440(24小时)。 flights_deptime <-< span=""> mutate(flights, dep_time_min = (dep_time %/% 100 * 60 + dep_time %% 100) %% 1440, sched_dep_time_min = (sched_dep_time %/% 100 * 60 + sched_dep_time %% 100) %% 1440, dep_delay_diff = dep_delay - dep_time_min + sched_dep_time_min )
suppressWarnings(library(ggplot2)) ggplot(filter(flights_deptime, dep_delay_diff > 0), aes(y = sched_dep_time_min, x = dep_delay_diff) ) + geom_point() ![](http://image109.360doc.com/DownloadImg/2020/11/0923/207019858_1_20201109112729540_wm)
(4)使用排秩函数找出10个延误时间最长的航班。如何处理名次相同的情况?仔细阅读min_rank的帮助文档。 #法一:
top_n(flights, 10, dep_delay) ## # A tibble: 10 x 19 ## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time ## ## 1 2013 1 9 641 900 1301 1242 1530 ## 2 2013 1 10 1121 1635 1126 1239 1810 ## 3 2013 12 5 756 1700 896 1058 2020 ## 4 2013 3 17 2321 810 911 135 1020 ## 5 2013 4 10 1100 1900 960 1342 2211 ## 6 2013 6 15 1432 1935 1137 1607 2120 ## 7 2013 6 27 959 1900 899 1236 2226 ## 8 2013 7 22 845 1600 1005 1044 1815 ## 9 2013 7 22 2257 759 898 121 1026 ## 10 2013 9 20 1139 1845 1014 1457 2210 ## # ... with 11 more variables: arr_delay, carrier, flight, ## # tailnum, origin, dest, air_time, distance, ## # hour, minute, time_hour #法二: flights_delayed <-< span=""> mutate(flights, dep_delay_min_rank = min_rank(desc(dep_delay)) ) flights_delayed <-< span=""> filter(flights_delayed, dep_delay_min_rank <=< span=""> 10 ) arrange(flights_delayed, dep_delay_min_rank) ## # A tibble: 10 x 20 ## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time ## ## 1 2013 1 9 641 900 1301 1242 1530 ## 2 2013 6 15 1432 1935 1137 1607 2120 ## 3 2013 1 10 1121 1635 1126 1239 1810 ## 4 2013 9 20 1139 1845 1014 1457 2210 ## 5 2013 7 22 845 1600 1005 1044 1815 ## 6 2013 4 10 1100 1900 960 1342 2211 ## 7 2013 3 17 2321 810 911 135 1020 ## 8 2013 6 27 959 1900 899 1236 2226 ## 9 2013 7 22 2257 759 898 121 1026 ## 10 2013 12 5 756 1700 896 1058 2020 ## # ... with 12 more variables: arr_delay, carrier, flight, ## # tailnum, origin, dest, air_time, distance, ## # hour, minute, time_hour, dep_delay_min_rank #法三: 全部内容见茶与生信公众号
|