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

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

3.4 練習問題の解答と解説

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

1. flightsからdep_time、dep_delay、arr_time、arr_delayを選ぶ方法をできるだけたくさん見つけ出すこと。ブレインストーミングをしてもよい。

# 案1
select(flights, dep_time, dep_delay, arr_time, arr_delay)

# 案2
vars = c("dep_time", "dep_delay", "arr_time", "arr_delay")
select(flights, vars)

発想が貧弱なせいかこれぐらいしか思い浮かばなかった。
他によい方法が思い浮かべば教えて下さい。

2. select()において、変数名を複数繰り返すとどうなるか

select(flights, dep_time, dep_time, dep_time)

のように実行してみるとdep_timeは1列しか表示されません。

3. one_of()関数は何をするか。次のベクトルと一緒に使うとなぜ役に立つのだろうか。

vars = c(
  "year", "month", "day", "dep_delay", "arr_delay"
  )

one_of()関数にはベクトルの中に値と一致する名前の列を指定する際に使用します。
この関数を使うことでベクトルで選択することができるため、ベクトルを変数として格納して使用することで、下記のようにコードが見やすくなったりします。

# まとめないコード
select(flights, one_of("year", "month", "day", "dep_delay", "arr_delay"))

#まとめたコード
select(flights, one_of(vars))

なお、このone_of()関数自体は、any_of()やall_of()に取って代わられているので、使わないほうがよいとのこと。
tidyselect.r-lib.org

4. 次のコードの実行結果には驚く。大文字小文字をselectのヘルパー関数はデフォルトでどのように扱うのか。デフォルトをどう変更できるのか。

select(flights, contains("TIME"))

という問題文のコードを実行すると分かりますが、基本的に大文字小文字は区別しません。
ignore.caseという変数がデフォルトではTRUEになっているので、大文字と小文字を厳密に区別したい時はFALSEに変更する必要があります。
tidyselect.r-lib.org