空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

3.2 練習問題の解答と解説

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

1. 次のようなフライトを探す。

a.到着が2時間以上遅れた

filter(flights, arr_delay>=120)

b. ヒューストン(IAHまたはHOUへのフライト)

filter(flights, dest == "IAH" | dest == "HOU")

と書くこともできますが、

filter(flights, dest %in% c("IAH", "HOU"))

c. United、American、またはDeltaによるフライト

主要航空会社の2レターコードをまずは理解してから、filterを使いましょう。
各航空会社の2レターコードは

です*1

filter(flights, carrier == "UA" | carrier == "AA" | carrier == "DL")

と書くことができますし、「%in%」で書くときは

filter(flights, carrier %in% c("UA","AA", "DL"))

と書くことができます。

d. 夏季(7月から9月)のフライト

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

e. 到着が2時間を超えて遅れたが、出発が遅れなかったフライト

filter(flights, dep_delay <= 0, arr_delay > 2)

f. 遅延は少なくとも1時間を超えたが、運行では30分以上取り返したフライト

filter(flights, dep_delay > 1, dep_delay - arr_delay <= 30)

filterには単純な条件式だけではなく、計算式を使って条件を作ることもできます。
いちいちmutate()関数を使って条件列を作らなくていいのは助かります。

g. 深夜0時から午前6時まで(深夜0時、午前6時も含む)のフライト

filter(flights, dep_time>=000, dep_time<=600)

2. dplyerのbetween()は何をするか。問題1の中でこれを使って答えを簡単化できるか。

dplyr.tidyverse.org
between(x, left, right)とはxに対してleft以上、right以下の範囲を指定します。
先ほどの例題のうち問1dはbetween()を使うと

filter(flights, between(month, 7, 9))

となり、問1gはbetween()を使うと

filter(flights, between(dep_time, 000, 600))

とそれぞれ書くことができます。

3. dep_timeが欠損値の便はいくつあるか。他に欠損している変数は何か。これらの行は何を表すか。

a) dep_timeが欠損値の便はいくつあるか

dep_timeが欠損値の便は

filter(flights, is.na(dep_time))

によりフィルターをかけると8,255行のtibbleができることから、8,255便あることがわかります。

b) 他に欠損している変数は何か

他に欠損している変数を確認する際は

view(filter(flights, is.na(dep_time)))

により確認することができます。
確認するとdep_delay、arr_time、arr_delay、air_timeが欠損していることがわかります。

c) これらの行は何を表すか

ということで実際の出発時刻や遅延も欠損で、飛行時間もなく、もちろん実際の到着時刻もなければ遅延もないとなるともちろん欠航になった便を表しています。

4. NA^0はなぜ欠損値にならないのか。NA|TRUE、FALSE & NAはなぜ欠損値にならないのか。一般規則を導けるか(NA * 0はややこしい反例となる)。

NA^0はなぜ欠損値にならないのか

これはもう底がどんな実数であっても0乗すれば1になるよねという算数のルールによるものです。

NA|TRUE、FALSE & NAはなぜ欠損値にならないのか

「NA | TRUE」の場合、NAにはTRUEやFALSEのいずれの値が入っても条件は成り立つのでTRUEになります。
一方で「FALSE & NA」の場合、NAがFALSEであってもTRUEであってもFALSEなので、FALSEが表示されます。

一般規則を導けるか

基本的にNAにどんな値が入っても式が成り立つ場合は欠損値になることはありませんし、や条件として成り立つ場合はTRUEが代入されます。
反例としてはNA * 0の時で、これはNAが返されます。