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

UBC/informatics/r/select

このページの最終更新日: 2022/06/03

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

広告

概要: select 関数とは

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

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

基本的な使い方

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

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

.data は省略可能。

A = select(dataframe, 1,3)

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

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


広告

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.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment