みなさんはtidyverseを使っていますでしょうか?私はデータを扱うときにはとりあえず読み込むくらいtidyverseが好きです。今回はtidyverseで私がよく使う関数と、それを使った派生技を紹介していきたいと思います。さっそくLet’Go!
left_joinは2つのデータセットをくっつけるときによく使います。innner_joinやraight_joinもありますが、僕はleft_joinしか使いません。キーの指定が面倒なので「左のtableには消えてはいけないデータがあって、右のtableの情報を足すだけ」と考えれば困ったことはないです。
例えば、このようなディズニーランドのアトラクションデータが2つあったとします。
head(attraction_coo)
id | ido | keido |
---|---|---|
オムニバス | 35.6328665 | 139.8799643 |
ペニーアーケード | 35.6340014 | 139.87741 |
ウエスタンリバー鉄道 | 35.6337201 | 139.8801419 |
カリブの海賊 | 35.6342728 | 139.8785159 |
ジャングルクルーズ:ワイルドライフ・エクスペディション | 35.6338175 | 139.880021 |
スイスファミリー・ツリーハウス | 35.6333234 | 139.8794404 |
head(attraction_start)
id | start |
---|---|
オムニバス | 1983-04-15 |
ペニーアーケード | 1983-04-15 |
ウエスタンリバー鉄道 | 1983-04-15 |
カリブの海賊 | 1983-04-15 |
ジャングルクルーズ:ワイルドライフ・エクスペディション | 1983-04-15 |
スイスファミリー・ツリーハウス | 1993-07-21 |
attraction_cooが座標のデータ、atraction_startがアトラクションオープン日のデータです。
この2つをくっつけてみます。
attraction_coo %>%
left_join(attraction_start)
## Joining with `by = join_by(id)`
id | ido | keido | start |
---|---|---|---|
オムニバス | 35.6328665 | 139.8799643 | 1983-04-15 |
ペニーアーケード | 35.6340014 | 139.87741 | 1983-04-15 |
ウエスタンリバー鉄道 | 35.6337201 | 139.8801419 | 1983-04-15 |
カリブの海賊 | 35.6342728 | 139.8785159 | 1983-04-15 |
ジャングルクルーズ:ワイルドライフ・エクスペディション | 35.6338175 | 139.880021 | 1983-04-15 |
スイスファミリー・ツリーハウス | 35.6333234 | 139.8794404 | 1993-07-21 |
魅惑のチキルーム:スティッチ・プレゼンツ”アロハ・エ・コモ・マイ!” | 35.633111 | 139.8800858 | 2008-07-25 |
ウエスタンランド・シューティングギャラリー | 35.6325856 | 139.8810976 | 1983-04-15 |
カントリーベア・シアター | 35.6325856 | 139.8810976 | 1983-04-15 |
蒸気船マークトウェイン号 | 35.6316173 | 139.8807639 | 1983-04-15 |
トムソーヤ島いかだ | 35.6319897 | 139.8815456 | 1983-04-15 |
トムソーヤ島 | 35.6315518 | 139.8846135 | 1983-04-15 |
ビッグサンダー・マウンテン | 35.6324726 | 139.8813379 | 1987-07-04 |
スプラッシュ・マウンテン | 35.6318279 | 139.8826562 | 1992-10-01 |
ビーバーブラザーズのカヌー探険 | 35.6310369 | 139.8817814 | 1983-04-15 |
アリスのティーパーティー | 35.6311482 | 139.8787883 | 1986-03-08 |
イッツ・ア・スモールワールド | 35.6306942 | 139.8787374 | 1983-04-15 |
キャッスルカルーセル | 35.6314043 | 139.8790643 | 1983-04-15 |
白雪姫と七人のこびと | 35.6316912 | 139.8791461 | 1983-04-15 |
シンデレラのフェアリーテイル・ホール | 35.6320581 | 139.8786619 | 2011-04-15 |
空飛ぶダンボ | 35.6314679 | 139.8795044 | 1983-04-15 |
ピーターパン空の旅 | 35.6317622 | 139.8796473 | 1983-04-15 |
ピノキオの冒険旅行 | 35.6317622 | 139.8796473 | 1983-04-15 |
プーさんのハニーハント | 35.6305544 | 139.8779199 | 2000-09-01 |
ホーンテッドマンション | 35.6305544 | 139.8779199 | 1983-04-15 |
ミッキーのフィルハーマジック | 35.6310663 | 139.8798985 | 2011-01-24 |
ガジェットのゴーコースター | 35.6305454 | 139.8764833 | 1996-04-15 |
グーフィーのペイント&プレイハウス | 35.6304899 | 139.8769999 | 2012-08-24 |
チップとデールのツリーハウス | 35.6304899 | 139.8769999 | 1996-04-15 |
トゥーンパーク | 35.6297405 | 139.8783338 | 1996-04-15 |
ドナルドのボート | 35.630495 | 139.8767787 | 1996-04-15 |
ミニーの家 | 35.6300548 | 139.8767905 | 1996-04-15 |
ロジャーラビットのカートゥーンスピン | 35.6311262 | 139.8783647 | 1996-04-15 |
スター・ツアーズ:ザ・アドベンチャーズ・コンティニュー | 35.6301946 | 139.87659 | 2013-05-07 |
スティッチ・エンカウンター | 35.632499 | 139.8768397 | 2015-07-17 |
スペース・マウンテン | 35.6323898 | 139.8755958 | 1983-04-15 |
バズ・ライトイヤーのアストロブラスター | 35.6323898 | 139.8755958 | 2004-04-15 |
モンスターズ・インク”ライド&ゴーシーク!” | 35.6338854 | 139.8762124 | 2009-04-15 |
美女と野獣“魔法のものがたり” | 35.6308104 | 139.8784616 | 2020-04-15 |
ベイマックスのハッピーライド | 35.6319006757121 | 139.878872126679 | 2020-04-15 |
くっつきましたね。本来はキーと呼ばれるどれとどれがつながるかという情報を与える必要があります。ただ、2つのデータフレームに共通する変数名がある場合は勝手にキーをそれにしてくれます。複数のデータを繋げ合わせて使いたいときに便利です。
次はselect関数です。たくさん変数があるデータから必要なデータだけを取ってくるのに使います。ここではディズニーリゾートのアトラクションやレストラン、ショーといったデータを使います。
head(disney_data)
id | park | area | ido | keido | URL | open | |
---|---|---|---|---|---|---|---|
9 | オムニバス | TDL | ワールドバザール | 35.6328665 | 139.8799643 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
10 | ペニーアーケード | TDL | ワールドバザール | 35.6340014 | 139.87741 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
11 | ウエスタンリバー鉄道 | TDL | アドベンチャーランド | 35.6337201 | 139.8801419 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
12 | カリブの海賊 | TDL | アドベンチャーランド | 35.6342728 | 139.8785159 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
13 | ジャングルクルーズ:ワイルドライフ・エクスペディション | TDL | アドベンチャーランド | 35.6338175 | 139.880021 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
14 | スイスファミリー・ツリーハウス | TDL | アドベンチャーランド | 35.6333234 | 139.8794404 | http://ja.dbpedia.org/resource/アトラクション | 1993-07-21 |
disney_data[80:100,]
id | park | area | ido | keido | URL | open | |
---|---|---|---|---|---|---|---|
88 | ロイヤルストリート・ベランダ | TDL | アドベンチャーランド | 35.6342488 | 139.8786632 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
89 | カウボーイ・クックハウス | TDL | ウエスタンランド | 35.6320058 | 139.8805677 | http://ja.dbpedia.org/resource/フード | 2019-03-15 |
90 | キャンプ・ウッドチャック・キッチン | TDL | ウエスタンランド | 35.6320042 | 139.8819893 | http://ja.dbpedia.org/resource/フード | 2016-11-22 |
91 | ザ・ダイヤモンドホースシュー | TDL | ウエスタンランド | 35.6326271 | 139.8794693 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
92 | ハングリーベア・レストラン | TDL | ウエスタンランド | 35.6325693 | 139.8807229 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
93 | プラザパビリオン・レストラン | TDL | ウエスタンランド | 35.6328647 | 139.8792524 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
94 | ペコスビル・カフェ | TDL | ウエスタンランド | 35.6328647 | 139.8792524 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
95 | グランマ・サラのキッチン | TDL | クリッターカントリー | 35.6310842 | 139.8803631 | http://ja.dbpedia.org/resource/フード | 1992-10-01 |
96 | ラケッティのラクーンサルーン | TDL | クリッターカントリー | 35.6305146 | 139.8813675 | http://ja.dbpedia.org/resource/フード | 1992-10-01 |
97 | キャプテンフックス・ギャレー | TDL | ファンタジーランド | 35.6325697 | 139.8806157 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
98 | クイーン・オブ・ハートのバンケットホール | TDL | ファンタジーランド | 35.6310234 | 139.8801823 | http://ja.dbpedia.org/resource/フード | 1998-11-13 |
99 | クレオズ | TDL | ファンタジーランド | 35.6310043 | 139.8797922 | http://ja.dbpedia.org/resource/フード | 1996-07-20 |
100 | トルバドールタバン | TDL | ファンタジーランド | 35.6320222 | 139.8811208 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
101 | ビレッジペイストリー | TDL | ファンタジーランド | 35.6309255 | 139.8795965 | http://ja.dbpedia.org/resource/フード | 1997-07-31 |
102 | マジカルマーケット | TDL | ファンタジーランド | 35.6325032 | 139.8798964 | http://ja.dbpedia.org/resource/フード | 2018-04-27 |
103 | ディンギードリンク | TDL | トゥーンタウン | 35.6315086 | 139.8756978 | http://ja.dbpedia.org/resource/フード | 1997-07-18 |
104 | トゥーントーン・トリート | TDL | トゥーンタウン | 35.6304132 | 139.8782642 | http://ja.dbpedia.org/resource/フード | 2013-03-18 |
105 | ヒューイ・デューイ・ルーイのグッドタイムカフェ | TDL | トゥーンタウン | 35.6300782 | 139.8781413 | http://ja.dbpedia.org/resource/フード | 1996-04-15 |
106 | ミッキーのトレーラー | TDL | トゥーンタウン | 35.6303392 | 139.8777734 | http://ja.dbpedia.org/resource/フード | 1996-04-15 |
107 | ソフトランディング | TDL | トゥモローランド | 35.6328594 | 139.8783802 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
108 | トゥモローランド・テラス | TDL | トゥモローランド | 35.6319108 | 139.8784628 | http://ja.dbpedia.org/resource/フード | 1983-04-15 |
tail(disney_data)
id | park | area | ido | keido | URL | open | |
---|---|---|---|---|---|---|---|
213 | ビッグバンドビート | TDS | アメリカンウォーターフロント | 35.6249106 | 139.8872273 | http://ja.dbpedia.org/resource/ショー | 2006-07-14 |
214 | ブロードウェイ・ミュージックシアター | TDS | アメリカンウォーターフロント | 35.6249106 | 139.8872273 | http://ja.dbpedia.org/resource/ショー | 2006-07-14 |
215 | マイ・フレンド・ダッフィー | TDS | アメリカンウォーターフロント | 35.6245484 | 139.8840107 | http://ja.dbpedia.org/resource/ショー | 2010-03-20 |
216 | ソング・オブ・ミラージュ | TDS | ロストリバーデルタ | 35.625774 | 139.8814132 | http://ja.dbpedia.org/resource/ショー | 2019-07-23 |
217 | ハロー、ニューヨーク! | TDS | アメリカンウォーターフロント | 35.6239623 | 139.8858322 | http://ja.dbpedia.org/resource/ショー | 2018-07-10 |
218 | ドックサイドステージ | TDS | アメリカンウォーターフロント | 35.6239623 | 139.8858322 | http://ja.dbpedia.org/resource/ショー | 2001-09-04 |
私が使いたいのはidとpark、ido、keido、openの5つの変数なのでこのように指定します。
data <- disney_data %>%
select(id, park, ido, keido, open)
head(data)
id | park | ido | keido | open | |
---|---|---|---|---|---|
9 | オムニバス | TDL | 35.6328665 | 139.8799643 | 1983-04-15 |
10 | ペニーアーケード | TDL | 35.6340014 | 139.87741 | 1983-04-15 |
11 | ウエスタンリバー鉄道 | TDL | 35.6337201 | 139.8801419 | 1983-04-15 |
12 | カリブの海賊 | TDL | 35.6342728 | 139.8785159 | 1983-04-15 |
13 | ジャングルクルーズ:ワイルドライフ・エクスペディション | TDL | 35.6338175 | 139.880021 | 1983-04-15 |
14 | スイスファミリー・ツリーハウス | TDL | 35.6333234 | 139.8794404 | 1993-07-21 |
できました。でも、5つも指定するのは面倒です。そんなときは「-」を使って次のようにも指定できます。
data <- disney_data %>%
select(-area, -URL)
head(data)
id | park | ido | keido | open | |
---|---|---|---|---|---|
9 | オムニバス | TDL | 35.6328665 | 139.8799643 | 1983-04-15 |
10 | ペニーアーケード | TDL | 35.6340014 | 139.87741 | 1983-04-15 |
11 | ウエスタンリバー鉄道 | TDL | 35.6337201 | 139.8801419 | 1983-04-15 |
12 | カリブの海賊 | TDL | 35.6342728 | 139.8785159 | 1983-04-15 |
13 | ジャングルクルーズ:ワイルドライフ・エクスペディション | TDL | 35.6338175 | 139.880021 | 1983-04-15 |
14 | スイスファミリー・ツリーハウス | TDL | 35.6333234 | 139.8794404 | 1993-07-21 |
同じ表ができました。さらにselectはstarts_withやends_withを使ってこんなこともできます。
head(
disney_data %>%
select(starts_with("i"))
)
id | ido | |
---|---|---|
9 | オムニバス | 35.6328665 |
10 | ペニーアーケード | 35.6340014 |
11 | ウエスタンリバー鉄道 | 35.6337201 |
12 | カリブの海賊 | 35.6342728 |
13 | ジャングルクルーズ:ワイルドライフ・エクスペディション | 35.6338175 |
14 | スイスファミリー・ツリーハウス | 35.6333234 |
head(
disney_data %>%
select(ends_with("do"))
)
ido | keido | |
---|---|---|
9 | 35.6328665 | 139.8799643 |
10 | 35.6340014 | 139.87741 |
11 | 35.6337201 | 139.8801419 |
12 | 35.6342728 | 139.8785159 |
13 | 35.6338175 | 139.880021 |
14 | 35.6333234 | 139.8794404 |
変数名の先頭が「i」の列を取ったり、末尾が「do」の列を持ってこれます。(この例ではほぼ意味ないけど)意外と知ってると役に立つのでお勧めです。
##filter
filterは行方向で条件を満たす行を取ってくる関数です。とある列の要素が条件を満たすときにその列を持ってくきます。
filter(変数 条件式 要素)のように書きます。
この表からディズニーランドのもののみをを分けるときなどに使います。parkの要素がTDLなのが東京ディズニーランド、TDSなのが東京ディズニーシーです。ランドのものだけを取ってきます。
TDL <- disney_data %>%
filter(park == "TDL")
tail(TDL)
id | park | area | ido | keido | URL | open | |
---|---|---|---|---|---|---|---|
110 | スウィートハート・カフェ前 | TDL | ワールドバザール | 35.633569 | 139.8786776 | http://ja.dbpedia.org/resource/フード | NA |
111 | トレジャーコメット横 | TDL | トゥモローランド | 35.63225 | 139.878694 | http://ja.dbpedia.org/resource/フード | NA |
112 | トゥーンポップ | TDL | トゥーンタウン | 35.6302778 | 139.8797502 | http://ja.dbpedia.org/resource/フード | 1996-04-15 |
113 | ポップ・ア・ロット・ポップコーン | TDL | トゥーンタウン | 35.6303035 | 139.8788917 | http://ja.dbpedia.org/resource/フード | 2005-11-01 |
114 | プーさんのハニーハント前 | TDL | ファンタジーランド | 35.630944 | 139.880083 | http://ja.dbpedia.org/resource/フード | NA |
115 | ポッピングポッド | TDL | トゥモローランド | 35.6327617 | 139.8787078 | http://ja.dbpedia.org/resource/フード | 2004-07-15 |
これで、ランドのみを取ってこれました。filter(変数名 条件式 要素)のように書くので、filter(park != “TDS”)と書いても同様の結果になります。
次は、アトラクションのみを取ってきたいと思います。しかし、アトラクションかどうかを記してある変数はありません。そこでURL変数の末尾に注目します。
disney_data[49:55, 6]
## [1] "http://ja.dbpedia.org/resource/花火"
## [2] "http://ja.dbpedia.org/resource/花火"
## [3] "http://ja.dbpedia.org/resource/ショー"
## [4] "http://ja.dbpedia.org/resource/ショー"
## [5] "http://ja.dbpedia.org/resource/パレード"
## [6] "http://ja.dbpedia.org/resource/グリーティング"
## [7] "http://ja.dbpedia.org/resource/アトラクション"
花火やショー、アトラクションと書いてありますね。この末尾を使って次のように書くとアトラクションのみを取ってこれます。
attraction <- disney_data %>%
filter(str_detect(URL, "アトラクション"))
head(attraction)
id | park | area | ido | keido | URL | open |
---|---|---|---|---|---|---|
オムニバス | TDL | ワールドバザール | 35.6328665 | 139.8799643 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
ペニーアーケード | TDL | ワールドバザール | 35.6340014 | 139.87741 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
ウエスタンリバー鉄道 | TDL | アドベンチャーランド | 35.6337201 | 139.8801419 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
カリブの海賊 | TDL | アドベンチャーランド | 35.6342728 | 139.8785159 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
ジャングルクルーズ:ワイルドライフ・エクスペディション | TDL | アドベンチャーランド | 35.6338175 | 139.880021 | http://ja.dbpedia.org/resource/アトラクション | 1983-04-15 |
スイスファミリー・ツリーハウス | TDL | アドベンチャーランド | 35.6333234 | 139.8794404 | http://ja.dbpedia.org/resource/アトラクション | 1993-07-21 |
tail(attraction)
id | park | area | ido | keido | URL | open | |
---|---|---|---|---|---|---|---|
66 | ジャンピン・ジェリーフィッシュ | TDS | マーメイドラグーン | 35.6265208 | 139.8823029 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
67 | ブローフィッシュ・バルーンレース | TDS | マーメイドラグーン | 35.626473 | 139.8818256 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
68 | マーメイドラグーンシアター | TDS | マーメイドラグーン | 35.626695 | 139.8816848 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
69 | ワールプール | TDS | マーメイドラグーン | 35.6266785 | 139.8820283 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
70 | スカットルのスクーター | TDS | マーメイドラグーン | 35.6272748 | 139.8821207 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
71 | フランダーのフライングフィッシュコースター | TDS | マーメイドラグーン | 35.6270359 | 139.8811528 | http://ja.dbpedia.org/resource/アトラクション | 2001-09-04 |
これでアトラクションだけ持ってこれます。
サンプルのデータが文字多めだったこともあって、文字列の操作みたいになっちゃいました。filterなんかは数値計算にも使えます(変数の要素が10以上みたいな感じ)。
ほんとはmutateとかgroup_by、そのままpurrrなんかも紹介したかったけど疲れたのでいったん区切ります。気が向いたらまたやります。