概要
- 列の選択はdplyr::select()が便利
- 古典的な方法として[ ]を使う方法もある
- select関数を使う時はヘルパー関数の活用が重要
イメージ
この記事で紹介する列の選択は下の画像のような操作です。
dplyr::select()で選択
列の選択をする時は基本的にdplyrパッケージのselect関数を使うのがお勧めです。select 関数の使い方は以下の通りです。
# dplyrパッケージの準備 library(dplyr) # select関数の使い方 select(データフレーム, 列名1, 列名2, ,,,)
今回紹介するselect関数はdplyrパッケージの関数なので最初にlibrary(dplyr)
でdplyrパッケージを呼び出す必要があります。select関数自体の使い方は簡単で、第1引数に操作したいデータフレームを指定し、第2引数以降に選択したい列の列名を列挙します。
具体例
具体例としてirisデータから列を選択する方法を考えてみたいと思います。
今回はirisデータから Species 列と Sepal.Length 列を選択して取り出す場合のコードを紹介します。
library(dplyr) select(iris, Species, Sepal.Length) #> Species Sepal.Length #> 1 setosa 5.1 #> 2 setosa 4.9 #> 3 setosa 4.7
上のコードのように第1引数に対象のデータ(今回はiris)、第2引数以降に欲しい列名(今回は Species, Sepal.Length)を列挙すれば取ってこれます。
古典的な方法
パッケージを使わない方法に[ ]を使う方法があります。select関数の方が使い勝手が良いですが、列数が非常に多い場合などはこちらの方が早い場合もあります。
使い方は以下の通りです。
データフレーム[ , c("列名1", "列名2", ,,,)]
対象のデータフレーム名に[ ]を繋げて、[ ]の中の第2引数に列名を文字列として指定(ダブルクォーテーションで囲って指定)すれば、列を取得することができます。
ちなみに[ ]の第1引数は行を指定する時に使います。今回は特に行の指定は実施せず、全ての行を取り出す操作を実施しています。
この方法では特別なパッケージは使わないのでライブラリを呼ぶ必要はありません。
具体例
具体例としてselect関数の時と同様に、irisデータから列を選択する方法を考えてみたいと思います。select関数の時の具体例と同じ操作を古典的な方法でおこなう場合のコードは以下の通りです。
iris[, c("Species", "Sepal.Length")] #> Species Sepal.Length #> 1 setosa 5.1 #> 2 setosa 4.9 #> 3 setosa 4.7
dplyr::selectの強み
select関数の強みはなんと言ってもヘルパー関数が充実していることだと思います。ヘルパー関数を使うことで欲しい列の指定が簡単になります。
ヘルパー関数には以下のようなものがあります。
関数 | 機能 | 具体例 |
---|---|---|
starts_with() | 列名の頭にある共通の文字列を認識させて選択 | 名前が「Sepal」で始まる列を選択 |
ends_with() | 列名の後ろにある共通の文字列を認識させて選択 | 名前が「Length」で終わる列を選択 |
contains() | 指定した文字列が含まれる列を選択 | 名前に「S」を含む列を選択 |
matches() | 正規表現を使って列名を指定して選択 | 正規表現で指定できるものなら何でも |
num_range() | 通し番号がある列名に対して特定の番号範囲で選択 | 「ID1」から「ID10」までの列を選択 |
where() | 関数を指定して、その関数がTRUEを返す列を選択 | 数値型の列を全て選択 |
everything() | すべての列を選択 | すべての列を選択 |
このヘルパー関数があることによってコードの記述が楽になり、可読性も高くなります。