R の select 関数:
データフレームの列を選択する
UBC/informatics/r/select
このページの最終更新日: 2023/02/26広告
概要: select 関数とは
select 関数とは、データフレームから列を抽出する R の関数である。dplyr というパッケージに含まれており、R のデフォルト関数ではないので、インストールされていないならまず install.packages でインストールし、読み込んでから使う。
以下のようなページと関連が深い。
- データフレームからの抽出
- filter 関数: 行の選択
基本的な使い方
列番号 or 列名指定で抽出
.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。以下で、dataframe から 1 列目と 3 列目が抽出され、A というオブジェクトに格納される。
library(dplyr)
A = select(.data = dataframe, 1,3)
.data は省略可能。
新しいデータフレームにおける列名を決めながら抽出することもできる。
列番号 or 列名指定で削除
既存のデータフレームから列を除くときは、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。
A = select(.data = A, -c(列名1、列名2...))
前方一致、後方一致、部分一致で抽出・削除
列の名前の一部を使っても抽出、削除が可能。関数の名前も、starts_with、ends_with、contains と直感的にわかりやすい。
A = select(.data = A, ends_with("文字列"))
A = select(.data = A, contains("文字列"))
大文字・小文字を区別するかどうかの設定も可能。starts_with、ends_with、contains の 3 つとも同じように指定できる。

2 つのデータフレームで共通する列を抽出する
mtcars を例にする。mtcar は以下のようなデータセットで、mpg, cyl... などのデータが列に納められている。

まず、ここから 2 つのサブデータセットを作ってみよう。mtcars_1 というデータセットには mpg, cyl, disp, hp の列があり、mtcars_2 には mpg, cyl, disp があるようにする。
mtcars2 = select(mtcars, c("mpg, cyl, disp"))
mtcars_1 と mtcars_2 に
もちろん、データの中身を見て select(mtcars_1, -hp) でも良いのだが、これだと大きなデータセットには対応できない。列名を手打ちせずに、全て関数でやる方法をマスターしておくとよい。
これは、one_of という関数を使ってやることもでき、実はこの方が応用の範囲が広い。こちらで覚えておく方が良さそうだ。
select(mtcars_1, one_of(A)) # ベクターに含まれるものを選ぶ
one_of を入れると、「ベクターのどれかひとつ」が概要すれば select 関数が動くようになる。mtcars_2 ではなく、もとの mtcars を使ってみると違いがわかる。
D = select(mtcars_1, one_of(C))
B は エラーになる。
! Can't subset columns that don't exist.
✖ Columns `drat`, `wt`, `qsec`, `vs`, `am`, etc. don't exist.
drat, wt... などの列が見つからず、select 関数が実行されないので、そもそも B というオブジェクトが生成されない。
一方、C と D のように one_of を使うと、C のベクターのいずれかが mtcars_1 に存在すれば、select 関数は実行される。以下のようなメッセージが出るが、オブジェクト D は生成される。
Unknown columns: `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`
広告
References
- 列の選択 - select関数. Link: Last access 2022/05/24.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。