专栏首页庄闪闪的R语言手册R数据科学|3.2.4课后习题

R数据科学|3.2.4课后习题

《R数据科学》是一本很好的R学习教材,这里给出第三章3.2.4[1]习题解答,仅供参考。如有误,望指正。

问题一

找出满足以下条件的所有航班:

  • a. 到达时间延误 2 小时或更多的航班。
  • b. 飞往休斯顿(IAH 机场或 HOU 机场)的航班。
  • c. 由联合航空(United)、美利坚航空(American)或三角洲航空(Delta)运营的航班。
  • d. 夏季(7 月、8 月和 9 月)出发的航班。
  • e. 到达时间延误超过 2 小时,但出发时间没有延误的航班。
  • f. 延误至少 1 小时,但飞行过程弥补回 30 分钟的航班。
  • g. 出发时间在午夜和早上 6 点之间(包括 0 点和 6 点)的航班。

解答

  • a. 由于arr_delay以分钟为单位,因此查找到达延迟为120分钟或以上的航班。
filter(flights, arr_delay >= 120)
#> # A tibble: 10,200 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1      811            630       101     1047            830
#> 2  2013     1     1      848           1835       853     1001           1950
#> 3  2013     1     1      957            733       144     1056            853
#> 4  2013     1     1     1114            900       134     1447           1222
#> 5  2013     1     1     1505           1310       115     1638           1431
#> 6  2013     1     1     1525           1340       105     1831           1626
#> # … with 10,194 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  • b. 查找dest为“IAH”或“HOU”的航班。
##方法一
filter(flights, dest == "IAH" | dest == "HOU")
#> # A tibble: 9,313 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1      517            515         2      830            819
#> 2  2013     1     1      533            529         4      850            830
#> 3  2013     1     1      623            627        -4      933            932
#> 4  2013     1     1      728            732        -4     1041           1038
#> 5  2013     1     1      739            739         0     1104           1038
#> 6  2013     1     1      908            908         0     1228           1219
#> # … with 9,307 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
##方法二
filter(flights, dest %in% c("IAH", "HOU"))
  • c. 查找carrier为“UA”,“AA”,“DL”的航班。
filter(flights, carrier %in% c("AA", "DL", "UA"))
#> # A tibble: 139,504 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1      517            515         2      830            819
#> 2  2013     1     1      533            529         4      850            830
#> 3  2013     1     1      542            540         2      923            850
#> 4  2013     1     1      554            600        -6      812            837
#> 5  2013     1     1      554            558        -4      740            728
#> 6  2013     1     1      558            600        -2      753            745
#> # … with 139,498 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  • d. 查找month为7,8,9的航班。
##方法一
filter(flights, month >= 7, month <= 9)
#> # A tibble: 86,326 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     7     1        1           2029       212      236           2359
#> 2  2013     7     1        2           2359         3      344            344
#> 3  2013     7     1       29           2245       104      151              1
#> 4  2013     7     1       43           2130       193      322             14
#> 5  2013     7     1       44           2150       174      300            100
#> 6  2013     7     1       46           2051       235      304           2358
#> # … with 86,320 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
##方法二
filter(flights, month %in% 7:9)
##方法三
filter(flights, month == 7 | month == 8 | month == 9)
  • e. 查找arr_delay > 120dep_delay <= 0的航班。
filter(flights, arr_delay > 120, dep_delay <= 0)
#> # A tibble: 29 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1    27     1419           1420        -1     1754           1550
#> 2  2013    10     7     1350           1350         0     1736           1526
#> 3  2013    10     7     1357           1359        -2     1858           1654
#> 4  2013    10    16      657            700        -3     1258           1056
#> 5  2013    11     1      658            700        -2     1329           1015
#> 6  2013     3    18     1844           1847        -3       39           2219
#> # … with 23 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#> #   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#> #   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  • f. 查找dep_delay >= 60dep_delay - arr_delay > 30的航班。
filter(flights, dep_delay >= 60, dep_delay - arr_delay > 30)
#> # A tibble: 1,844 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1     2205           1720       285       46           2040
#> 2  2013     1     1     2326           2130       116      131             18
#> 3  2013     1     3     1503           1221       162     1803           1555
#> 4  2013     1     3     1839           1700        99     2056           1950
#> 5  2013     1     3     1850           1745        65     2148           2120
#> 6  2013     1     3     1941           1759       102     2246           2139
#> # … with 1,838 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  • g. 查找出发时间在午夜和早上6点之间(包括0点和6点)的航班。
##由于数据中时间的表示方式,查找在午夜到早上6点之间起飞的航班变得很复杂。
##在dep_time中,午夜用2400表示,而不是0。您可以通过检查dep_time的最小值和最大值来验证这一点。
summary(flights$dep_time)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#>       1     907    1401    1349    1744    2400    8255
##可以使用模运算符%%。模运算符返回除法的余数。
##由于2400% % 2400 == 0和其他所有时间不变,我们可以将模运算的结果与600进行比较。
filter(flights, dep_time %% 2400 <= 600)
#> # A tibble: 9,373 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1      517            515         2      830            819
#> 2  2013     1     1      533            529         4      850            830
#> 3  2013     1     1      542            540         2      923            850
#> 4  2013     1     1      544            545        -1     1004           1022
#> 5  2013     1     1      554            600        -6      812            837
#> 6  2013     1     1      554            558        -4      740            728
#> # … with 9,367 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

问题二

dplyr中对筛选有帮助的另一个函数是 between()。它的作用是什么?你能使用这个函数来简化解决前面问题的代码吗?

解答

between(x, left, right)等价于x >= left & x <= right

filter(flights, between(month, 7, 9))
filter(flights, month >= 7, month <= 9)

问题三

dep_time有缺失值的航班有多少?其他变量的缺失值情况如何?这样的行表示什么情况?

解答

filter(flights, is.na(dep_time))
#> # A tibble: 8,255 x 19
#>    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
#>   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
#> 1  2013     1     1       NA           1630        NA       NA           1815
#> 2  2013     1     1       NA           1935        NA       NA           2240
#> 3  2013     1     1       NA           1500        NA       NA           1825
#> 4  2013     1     1       NA            600        NA       NA            901
#> 5  2013     1     2       NA           1540        NA       NA           1747
#> 6  2013     1     2       NA           1620        NA       NA           1746
#> # … with 8,249 more rows, and 11 more variables: arr_delay <dbl>,
#> #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#> #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

值得注意的是,这些行也没有arr_time。这些航班似乎被取消了。

问题四

为什么 NA ^ 0 的值不是 NA ?为什么 NA | TRUE 的值不是 NA ?为什么 FALSE & NA 的值不是 NA ?你能找出一般规律吗?(NA * 0 则是精妙的反例!)

解答

NA ^ 0
#> [1] 1

NA ^ 0 == 1因为:

x ^ 0 = 1
##这三个运算都是逻辑运算
NA | TRUE
#> [1] TRUE
NA & FALSE
#> [1] FALSE
NA & TRUE
#> [1] NA
NA * 0
#> [1] NA
Inf * 0
#> [1] NaN
-Inf * 0
#> [1] NaN

参考资料

[1]

R数据科学: https://jrnold.github.io/r4ds-exercise-solutions

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:我才是赵西西

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R数据科学|3.3课后习题

    《R数据科学》是一本很好的R学习教材,小编学习过程中,把作业题做了一下,今天给出第三章3.3[1]习题解答,仅供参考。如有误,可留言。

    庄闪闪
  • R数据科学|5.3课后习题解答

    研究 x、y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条钻石数据,如何确定表示长、宽和高的变量?

    庄闪闪
  • R数据科学|5.5.2内容介绍及课后习题解答

    要想对两个分类变量间的相关变动进行可视化表示,需要计算出每个变量组合中的观测数量。常用的两种方法有:

    庄闪闪
  • R数据科学|3.6习题解答

    这个问题是数据分析的一个基本问题:成本函数。作为分析人员,我们之所以对航班延误感兴趣,是因为对乘客来说代价高昂。在许多情况下,到达延迟更重要。在大多数情况下,迟...

    庄闪闪
  • R数据科学|5.5.1 习题解答

    前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视化结果进行改善。

    庄闪闪
  • 优质数据科学课程推荐:总结篇

    原作者   David Venturi 编译 CDA 编译团队 本文为  CDA 数据分析师原创作品,转载需授权 一年以前,我还只是一个没有任何编程经验的技术宅...

    CDA数据分析师
  • 想学习数据科学?我们整理了一份优质编程入门课程清单

    原作者 David Venturi 编译 CDA 编译团队 本文为 CDA 数据分析师原创作品,转载需授权 一年以前,我还只是一个没有任何编程经验的电...

    CDA数据分析师
  • 学习R编程的前5门课程

    越来越多的程序员正在学习R编程语言以成为一名数据科学家,这是全球最热门,最高薪的技术工作之一。

    February
  • 如何学习数据科学

    用户1756920
  • 【数据科学】如何学习数据科学

    本文翻译自一篇博客文章,作者是一名软件工程师,他描述了在五年时间内学习数据科学的经历和心得,他的学习途径包括了自学(书籍、博客、小项目),课程学习,教学讨论,会...

    陆勤_数据人网
  • 研究了数千个在线课程,我整理了一份数据科学入门课清单

    大数据文摘
  • 最佳机器学习深度学习课程Top 7,第三名年薪已过12万美元

    【新智元导读】我们经过详尽的比对,为你奉上最好的机器学习课程、最好的深度学习课程和最好的 AI 课程,涵盖了几乎所有相关的内容,包括 Python、R、深度学习...

    新智元
  • 独家 | 手把手教你学习R语言(附资源链接)

    作者:NSS 翻译:杨金鸿 术语校对:韩海畴 全文校对:林亦霖 本文约3000字,建议阅读7分钟。 本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言...

    数据派THU
  • 【学习】如何成长为顶级数据分析师和数据挖掘师?

    #玩转大数据#12点的钟声敲响后,意味着已经跨过2015,进入2016了。新的一年应该拥有新的开端以及新的计划目标,也标志着新的希望。一个数据科学家在年尾做了一...

    小莹莹
  • 如何成长为顶级数据分析师和数据挖掘师?

    用户1756920
  • 2017年最全的数据科学学习计划(1)

    导读 希望这篇学习路线图对你学习数据科学有帮助,需要说明的是国内本文中所说的数据科学家在国内一般称为数据分析师或者数据挖掘师,尽管称谓不同,但文章的路线图仍可...

    小莹莹
  • 数据科学优质课程推荐#2:统计入门课程篇

    原作者 David Venturi 编译 CDA 编译团队 本文为 CDA 数据分析师原创翻译作品,转载需授权 一年前,我退出了加拿大最好的计算机科学...

    CDA数据分析师
  • 严格的评选标准,造就了这张分享量过千的在线机器学习课程榜单

    选自Medium 作者:David Venturi 机器之心编译 本文作者 David Venturi 是技术博客 freeCodeCamp 的知名主笔之一。 ...

    机器之心
  • 资源 | 自学数据科学&机器学习?19个数学和统计学公开课推荐

    数学和统计学是数据科学和机器学习的基础。就我所知,大多数成功的数据科学家都来自这些领域——计算机科学、应用数学和统计学、经济学。如果你想掌握数据科学,你就必须要...

    华章科技

扫码关注云+社区

领取腾讯云代金券