DS講座 tidyverse tidyverse講座

【R前処理講座15】{dplyr} select:列の選択【tidyverse】

こんにちは,shun(@datasciencemore)です!
今回はselectについて,説明していきますね.
selectは列を選択するための関数です.
さて,selectの復習をしてみましょう.
selectは,条件を指定してあげて,その条件で指定した列を抽出するときに使用します.

今回はirisを使用していきます.

0.selectの内部処理

selectは,内部で以下の処理をしています.

① 条件を判定し,列ごとに論理値ベクトル(TRUE,FALSE)を作成する.
② ①の論理値ベクトルからTRUEの列の列番号を取得する.
③ ②で取得した列番号の列を抽出する.

filterの時と同様,これも何言っているのかよくわからないですね笑
具体例を見ていきましょう.
irisのSepal.Length列とSpecies列を抽出したい場合を考えてみましょう.

想定どおり,抽出できましたね.
これの内部処理のイメージ図を見てみましょう.

 

① 条件であるSepal.Length,Speciesを判定し,列ごとに論理値ベクトル(TRUE,FALSE)を作成する.
② ①の論理値ベクトルからTRUEの列の列番号(1,5)を取得する.
③ ②で取得した列番号(1,5)の列を抽出する.

filterと似ていますよね.
filterは行を抽出していたのに対し,selectは列を抽出しています.
1番気をつけるところは,filterは,論理値ベクトルが作成されていたのに対し,selectは列番号が作成されていることです!

この処理によって,selectの中身に与えてあげる条件として列番号を与えても全く同じ動作をします.

 

条件を列名で指定した時と全く同じデータフレームが抽出されることが確認できました.
このことは,filterの内部処理と比較すると,そこまで使用頻度は高くないです.
なので,無理して覚えなくてもいいかもです笑
ただ,忘れたころに時々,この考え方も必要となることがあるので,頭の片隅に入れていただけたらと思います.

さて,このことを踏まえて,次章からselectの具体的な使い方を学んでいきます.
selectには便利関数がたくさんあるので,それらについてまとめていきます.

ちなみに直接指定とか範囲指定とか日本語の説明は正式名称ではなくて僕の造語です.
日本語にしたほうがイメージがわきやすいかと思ったので,適当に日本語化しました.

1.直接指定

基本中の基本,列名を直接指定して列を抽出します.

出力は上と全く同じなので省略します.

2.範囲指定 :

列名と列名の間に:を入れることで,それらの間の列名すべてをとってくることができます.

 

3.間接指定 -

列名の前に-をつけることで,その列名を抽出から除くことができます.

 

4.前方一致 starts_with

列名の前方部分を指定して,一致する列を抽出します.

 

5.後方一致 ends_with

 

6.部分一致 contains

列名に含まれる文字列を指定して,一致する列を抽出します.

 

7.正規表現一致 matches

正規表現で一致する列を抽出します.

正規表現については,今回は省略します.

 

 

8.文字列指定 all_of

列名を文字列で指定します.
これは,変数に文字列を格納した時に便利です.

現時点(2021年1月)では,all_of()を使用しないで直接文字列で指定しても抽出できます.

しかし,出力されるデータフレームに警告が出ています.

要約すると別のデータフレームにvarという列名があると,varに格納した変数が使えなくなるからall_of()を使ってねってことです.
将来的に直接文字列で指定することはできなくなるっぽいので,素直にall_ofを使用しましょう!

9.全列指定 everything

全列を指定します.

これは,上のように使うことはまずないですが列名の順番を変えるときに役立ちます.

 

10.データ型指定 where

指定したデータ型を抽出します.

 

まとめ

いやー,たくさんありましたね.
selectは内部的には条件を満たす列を数値で取得し,それをもとに列を選択しています.
また,selectの具体例についてまとめると,以下のようになります.

  1. 直接指定
  2. 範囲指定 :
  3. 間接指定 -
  4. 前方一致 starts_with()
  5. 後方一致 ends_with()
  6. 部分一致 contains()
  7. 正規表現一致 maches()
  8. 文字列指定 all_of()
  9. 全列指定 everything()
  10. データ型指定 where()

多いっすね笑
一度に全部覚える必要はまったくありません.
何回も使用していくうちに自然と覚えていくのであせらないで何回も繰り返していきましょう!

それじゃ,お疲れさまでした!!

参考

1.https://kazutan.github.io/kazutanR/hands_on_170730/select.html

-DS講座, tidyverse, tidyverse講座