R の select 関数:
データフレームの列を選択する

UBC/informatics/r/select

このページの最終更新日: 2023/02/26

  1. 概要: select 関数とは
  2. 基本的な使い方
  3. 2 つのデータフレームで共通する列を抽出する

広告

概要: select 関数とは

select 関数とは、データフレームから列を抽出する R の関数である。dplyr というパッケージに含まれており、R のデフォルト関数ではないので、インストールされていないならまず install.packages でインストールし、読み込んでから使う。

以下のようなページと関連が深い。

基本的な使い方

列番号 or 列名指定で抽出

.data でデータフレームを指定し、その後に列番号を書く。syntax が直感的で覚えやすいのがいい。以下で、dataframe から 1 列目と 3 列目が抽出され、A というオブジェクトに格納される。

install.packages('dplyr') # 初回のみ
library(dplyr)
A = select(.data = dataframe, 1,3)

.data は省略可能。

A = select(dataframe, 1,3)

新しいデータフレームにおける列名を決めながら抽出することもできる。

A = select(dataframe, 新列名1 = dataframeの列名1, 新列名2 = dataframeの列名2)

列番号 or 列名指定で削除

既存のデータフレームから列を除くときは、マイナス記号を使える。複数の列を一気に除きたいときは、c でくくる。

A = select(.data = A, -列名)
A = select(.data = A, -c(列名1、列名2...))

前方一致、後方一致、部分一致で抽出・削除

列の名前の一部を使っても抽出、削除が可能。関数の名前も、starts_with、ends_with、contains と直感的にわかりやすい。

A = select(.data = A, starts_with("文字列"))
A = select(.data = A, ends_with("文字列"))
A = select(.data = A, contains("文字列"))

大文字・小文字を区別するかどうかの設定も可能。starts_with、ends_with、contains の 3 つとも同じように指定できる。

A = select(.data = A, starts_with("文字列", ignore.case = TRUE))

2 つのデータフレームで共通する列を抽出する

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

Rの組み込みデータセット mtcars

まず、ここから 2 つのサブデータセットを作ってみよう。mtcars_1 というデータセットには mpg, cyl, disp, hp の列があり、mtcars_2 には mpg, cyl, disp があるようにする。

mtcars1 = select(mtcars, c("mpg, cyl, disp, hp"))
mtcars2 = select(mtcars, c("mpg, cyl, disp"))

mtcars_1 と mtcars_2 に 共通する列を抽出する には、カラムの名前を抽出する colnames 関数 を使って、以下のようにする。

select(mtcars_1, colnames(mtcars_2))

もちろん、データの中身を見て select(mtcars_1, -hp) でも良いのだが、これだと大きなデータセットには対応できない。列名を手打ちせずに、全て関数でやる方法をマスターしておくとよい。


これは、one_of という関数を使ってやることもでき、実はこの方が応用の範囲が広い。こちらで覚えておく方が良さそうだ。

A = colnames(mtcars_2) # 列名を含むベクターを作る
select(mtcars_1, one_of(A)) # ベクターに含まれるものを選ぶ

one_of を入れると、「ベクターのどれかひとつ」が概要すれば select 関数が動くようになる。mtcars_2 ではなく、もとの mtcars を使ってみると違いがわかる。

B = select(mtcars_1, colnames(mtcars))

C = colnames(mtcars)
D = select(mtcars_1, one_of(C))

B は エラーになる。

Error in `select()`:
! 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 は生成される。

Warning message:
Unknown columns: `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`


広告

References

  1. 列の選択 - select関数. Link: Last access 2022/05/24.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。