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

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

3.3 練習問題の解答と解説

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

1. 欠損値を頭から整列させるためにarrange()をどのように使えば良いか(ヒント:is.na()を使う)。

さて、降順にしても昇順にしても基本的にNAが末尾に行く仕組みなわけですが、NAを敢えて頭から整列させたいという話。ヒントであるis.na()をどう使うかがカギとなります。
例としてair_timeがNAのものが先頭に来るように昇順に並べるとします。
普通に

view(arrange(flights, air_time))

とした場合、NAは最後の行に回されてしまいます。
では、ヒントのようにis.na()を使って昇順に並べようとします。

view(arrange(flights, is.na(air_time)))

としてみるとair_timeがNAのものが全部後ろにきます。

view(arrange(flights, desc(is.na(air_time))))

とすると今度はNAのものが全部前にきます。
ここに

view(arrange(flights, desc(is.na(air_time)), air_time))

と追加することでNAが先頭に来る昇順に並べることができます。
ちなみに、NAを先頭にして降順に並べたい場合は

view(arrange(flights, desc(is.na(air_time)), desc(air_time)))

とするとNAを先頭にして降順に並んでいることが確認できます。

2. flightsを整列して、遅延がもっとも大きかった便を探す。最も朝早く出発したフライトを探すにはどうするか。

2-1. flightsを整列して、遅延がもっとも大きかった便を探す。

view(arrange(flights, desc(dep_delay)))

出発の遅れを大きい順に並べればいいので、このようなコードになります。

2-2. 最も朝早く出発したフライトを探すにはどうするか。

view(arrange(flights, dep_time))

出発時間を小さい順に並べればよいので、このようなコードになります。

3. flightsを整列して、最速のフライトを探す(ヒント:距離を飛行時間で割れば平均速度が求められる)。

arrange()もfilter()のように式を条件に組み込むことができます。

view(arrange(flights, distance/air_time))

4. どのフライトが最長距離を飛んだか。最短距離のフライトはどれか

飛行距離はdistanceに入っています。
最長距離は

view(arrange(flights, desc(distance)))

で求められますし、最短距離は

view(arrange(flights, distance))

で求められます。