R の select 関数: データフレームの列を選択する
UBC/informatics/r/select
このページの最終更新日: 2024/09/30応用 (別ページ)
広告
概要: select() 関数とは
select() 関数とは、データフレームから列を抽出する R の関数である。dplyr というパッケージに含まれており、R のデフォルト関数ではないので、インストールされていないならまず install.packages でインストールし、読み込んでから使う。
dplyr は tidyverse というパッケージに含まれている。こちらを使う tidyverse は dplyr 以外にも便利な関数を含んでいるので、こちらを使うことが多いだろう。詳細は tidyverse パッケージ のページへ。
library(dplyr)
このページでは、select() 関数の基本的な使い方をまとめる。以下のようなページと関連が深い。
- データフレームからの抽出
- filter 関数: 行の選択
select() 関数とよく一緒に使われる関数を表にしておく。主に文字列指定のときに使う。
starts_with | 前方一致 |
ends_with | 後方一致 |
contains | 部分一致 |
all_of | ベクターで列を指定する ときに使用。ベクターに含まれる変数が抽出元のデータフレームに存在しない場合にはエラーになり、計算が止まる。 |
any_of | ベクターで指定。all_of と似ているが、ベクターに含まれる変数が抽出元のデータフレームにない場合、その列は単にスキップされ、エラーは出ない。 |
列番号 or 列名指定で抽出
ppcor パッケージに select() という同名の関数があるので、dplyr::select() と書く方が安全である。
.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。以下で、dataframe から 1 列目と 3 列目が抽出され、A というオブジェクトに格納される。
.data は省略可能。
演算子 %>% を使うとこうなる。
新しいデータフレームにおける列名を決めながら抽出することもできる。
列番号 or 列名指定で削除
既存のデータフレームから列を除くときは、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。
前方一致、後方一致、部分一致で抽出・削除
列の名前の一部を使っても抽出、削除が可能。関数の名前も、starts_with、ends_with、contains と直感的にわかりやすい。
A = dplyr::select(.data = A, ends_with("文字列"))
A = dplyr::select(.data = A, contains("文字列"))
大文字・小文字を区別するかどうかの設定も可能。starts_with、ends_with、contains の 3 つとも同じように指定できる。
ベクターで抽出する列を指定
組み込みデータセット の mtcars を使ってみる。このデータは、以下のように車の種類が行に、mpg (マイル/ガロン、燃費の指標)、hp (馬力 horse power) などが列になっている。
最初の 3 行、mpg, cyl, disp を選びたいときは、上で見たように c() で囲って複数指定する。
これは、c() の部分をベクターに格納して以下のように書いても同じに思える。
A <- mtcars %>% dplyr::select(vec)
これで実際に動くときは動くのだが、以下のような警告が出る。
all_of の使用
これは、select() の中で vec というベクターを指定したいときは、単に vec と書くのではなく、all_of(vec) を使えということである。
all_of を使わないと、
any_of の使用
all_of(vec) の代わりに、any_of を使うこともできる。
all_of と any_of の違いは、
「color という列はないので、抽出できない」というエラーに。
ところが、any_of にすると存在しないカラムは無視し、存在する "mpg", "cyl", "disp" が抽出される。個人的には、
広告
References
- 列の選択 - select関数. Link: Last access 2022/05/24.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。