《R数据科学》课后练习题:第三章(2)

(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()

(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

#法三:

全部内容见茶与生信公众号

(0)

相关推荐