r tidyverse 使い方 | 列 filter 絞り込み select関数 – dplyrパッケージ

スポンサーリンク

tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使います。selectは条件を満たす列を絞り込む関数です。様々な指定方法で絞り込みができます。列名と文字列条件のマッチや正規表現を利用した絞り込みは、ヘルパー関数を利用します。Rの標準的な操作subset関数と同じように使えます。

列の指定方法は以下のような方法があります。

  • 名前を指定(カンマ区切り)
  • 範囲を指定(start列名:end列名)
  • 除外(-列名)
  • 名前を変更して指定(単純に列名変更ではrenameが便利)
  • ヘルパー関数と組み合わせた指定
とにかく早く問題解決したい人はこちら>>こちらでデータ解析相談

条件を満たす列を絞り込む

dplyrパッケージのselect関数を使えば、データフレームから条件をみたす列の絞り込みを行うことができます。tidyverseパッケージをロードすると使えるようになります。select関数は、複数の条件を指定でき、全ての条件を満たす列が絞り込まれます。

書式

select関数は、第1引数にデータ、第2引数以降に絞り込みを行う列名や条件を指定できます。パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。

> select(データ, 条件)

> データ %>% select(条件1)

列名を指定

select関数に複数の列名を指定して2列に絞り込んでいます。絞り込んだ条件は、列名を2つ、カンマ区切りで並べて「Sepal.Length, Sepal.Width」としました。対応する列データだけが抽出されます。

 1: > library(tidyverse)
 2: 
 3: > iris %>% head
 4:   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 5: 1          5.1         3.5          1.4         0.2  setosa
 6: 2          4.9         3.0          1.4         0.2  setosa
 7: 3          4.7         3.2          1.3         0.2  setosa
 8: 4          4.6         3.1          1.5         0.2  setosa
 9: 5          5.0         3.6          1.4         0.2  setosa
10: 6          5.4         3.9          1.7         0.4  setosa
11: 
12: > iris %>% select(Sepal.Length, Sepal.Width) %>% head
13:   Sepal.Length Sepal.Width
14: 1          5.1         3.5
15: 2          4.9         3.0
16: 3          4.7         3.2
17: 4          4.6         3.1
18: 5          5.0         3.6
19: 6          5.4         3.9

範囲を指定

select関数に列名を範囲で指定して列を絞り込んでいます。絞り込んだ条件は、開始列名〜終了列名で、コロン(:)で並べて「Sepal.Width:Petal.Length」としました。対応する2列目〜3列目データだけが抽出されます。

1: > iris %>% select(Sepal.Width:Petal.Length) %>% head
2:   Sepal.Width Petal.Length
3: 1         3.5          1.4
4: 2         3.0          1.4
5: 3         3.2          1.3
6: 4         3.1          1.5
7: 5         3.6          1.4
8: 6         3.9          1.7

除外

select関数に除外する列名を指定して列を絞り込んでいます。絞り込んだ条件は、除外列名の指定(複数)で、それぞれマイナス(ー)をつけて、カンマ区切りで並べて「-Sepal.Width, -Petal.Length」としました。対応する2列目と3列目が除外されて、残りの列だけが抽出されます。

1: > iris %>% select(-Sepal.Width, -Petal.Length) %>% head
2:   Sepal.Length Petal.Width Species
3: 1          5.1         0.2  setosa
4: 2          4.9         0.2  setosa
5: 3          4.7         0.2  setosa
6: 4          4.6         0.2  setosa
7: 5          5.0         0.2  setosa
8: 6          5.4         0.4  setosa

列名の変更

列を絞り込むときに、列名を変更することができます。selectで列を選びつつ列名を変更する方法と、単純に列名だけ変更する方法gあります。

selectを利用した列名変更

select関数に複数の列名を指定して2列に絞り込んでいます。ただし、その時、列名も変更しています。絞り込んだ条件は、列名を2つ、カンマ区切りで並べましたが、変更後の列名を与えて「”sepal_length” = Sepal.Length, “sepal_width” = Sepal.Width」としました。対応する列だけが指定した列名へ変更されて抽出されます。

1: > iris %>% select("sepal_length" = Sepal.Length, "sepal_width" = Sepal.Width) %>% head
2:   sepal_length sepal_width
3: 1          5.1         3.5
4: 2          4.9         3.0
5: 3          4.7         3.2
6: 4          4.6         3.1
7: 5          5.0         3.6
8: 6          5.4         3.9

単純に列名を変更するrename

rename関数に複数の列名を指定して、列名を変更しています。変更後の列名を与えて「”sepal_length” = Sepal.Length, “sepal_width” = Sepal.Width」としました。rename関数は列名の変更だけを行うので、指定した列の列名が変更されて、データは全体が表示されます。

1: > iris %>% rename("sepal_length" = Sepal.Length, "sepal_width" = Sepal.Width) %>% head
2:   sepal_length sepal_width Petal.Length Petal.Width Species
3: 1          5.1         3.5          1.4         0.2  setosa
4: 2          4.9         3.0          1.4         0.2  setosa
5: 3          4.7         3.2          1.3         0.2  setosa
6: 4          4.6         3.1          1.5         0.2  setosa
7: 5          5.0         3.6          1.4         0.2  setosa
8: 6          5.4         3.9          1.7         0.4  setosa

ヘルパー関数との組み合わせ

select関数による列の絞り込みの条件に、細かい条件を指定したい場合はヘルパー関数を使って指定することができます。ヘルパー関数を使うと、列名とのマッチ条件で絞り込んだり、列名との正規表現で絞り込むことができます。

ヘルパー関数

  • starts_with(), ends_with() 指定した文字列で始まる/終わる
  • contains() 指定した文字列を含む
  • matches() 指定した正規表現にマッチする
  • one_of() 指定した文字列群のどれかにマッチする
  • num_range() compare1・compare2…などの様に連続した列名の抽出

指定した文字列で始まる/終わる 列を選択

select関数にヘルパー関数を指定して列を絞り込んでいます。絞り込んだ条件は、指定した文字で始まる列名「starts_with(“S”)」としました。対応する列データだけが抽出されます。

1: > iris %>% select(starts_with("S")) %>% head
2:   Sepal.Length Sepal.Width Species
3: 1          5.1         3.5  setosa
4: 2          4.9         3.0  setosa
5: 3          4.7         3.2  setosa
6: 4          4.6         3.1  setosa
7: 5          5.0         3.6  setosa
8: 6          5.4         3.9  setosa

指定した文字列を含む列を選択

select関数にヘルパー関数を指定して列を絞り込んでいます。絞り込んだ条件は、指定した文字を含む列名「contains(“th”)」としました。対応する文字列を含む列データだけが抽出されます。

1: > iris %>% select(contains("th")) %>% head
2:   Sepal.Length Sepal.Width Petal.Length Petal.Width
3: 1          5.1         3.5          1.4         0.2
4: 2          4.9         3.0          1.4         0.2
5: 3          4.7         3.2          1.3         0.2
6: 4          4.6         3.1          1.5         0.2
7: 5          5.0         3.6          1.4         0.2
8: 6          5.4         3.9          1.7         0.4

正規表現にマッチする列を選択

select関数にヘルパー関数を指定して正規表現で列を絞り込んでいます。絞り込んだ条件は、V〜Zのいずれかにマッチする列名「matches(“[VWXYZ]”)」としました。指定した正規表現にマッチする列名のデータだけが抽出されます。

1: > iris %>% select(matches("[VWXYZ]")) %>% head
2:   Sepal.Width Petal.Width
3: 1         3.5         0.2
4: 2         3.0         0.2
5: 3         3.2         0.2
6: 4         3.1         0.2
7: 5         3.6         0.2
8: 6         3.9         0.4

列の範囲指定

select関数にヘルパー関数を指定して連番の列を絞り込んでいます。renameで列名を連番に変更し、その後、wid1,wid2,wid3…というような連番になる列名「num_range(“wid”, 1:3)」としました。条件指定したのは「wid1,wid2,wid3」ですが、実際にマッチした「wid1,wid2」だけが抽出されます。

 1: > iris %>% rename(
 2: "len1"=Sepal.Length, 
 3: "wid1"=Sepal.Width, 
 4: "len2"=Petal.Length, 
 5: "wid2"=Petal.Width) %>% 
 6: select(num_range("wid", 1:3)) %>% head
 7:   wid1 wid2
 8: 1  3.5  0.2
 9: 2  3.0  0.2
10: 3  3.2  0.2
11: 4  3.1  0.2
12: 5  3.6  0.2
13: 6  3.9  0.4

指定した文字列のどれか1つにマッチする列を選択

select関数にヘルパー関数を指定して文字列候補に一致する列を絞り込んでいます。絞り込んだ条件は、”species”, “Species”, “spece”のいずれかにマッチする列名「one_of(c(“species”, “Species”, “spece”))」としました。指定した文字列にマッチする列名のデータだけが抽出されます。尚、指定した文字列に複数ヒットすれば、それぞれに対応した列が抽出されます。表示する列の順番も指定した文字列に対応した順番になります。

 1: > iris %>% select(one_of(c("species", "Species", "spece"))) %>% head
 2:   Species
 3: 1  setosa
 4: 2  setosa
 5: 3  setosa
 6: 4  setosa
 7: 5  setosa
 8: 6  setosa
 9: Warning message:
10: Unknown columns: `species`, `spece`

Rの標準的な操作

データフレームに対して列の絞り込みを行う場合、Rの標準的な方法ではsubset関数を使います。第1引数にデータ、第2引数に絞り込みの条件を与えます。列の絞り込みの条件は、subset(select=条件)として指定します。

subset 列番号で絞り込み

1: > iris %>% subset(select=c(1,2)) %>% head
2:   Sepal.Length Sepal.Width
3: 1          5.1         3.5
4: 2          4.9         3.0
5: 3          4.7         3.2
6: 4          4.6         3.1
7: 5          5.0         3.6
8: 6          5.4         3.9

subset 列範囲で絞り込み

1: > iris %>% subset(select=c(1:2)) %>% head
2:   Sepal.Length Sepal.Width
3: 1          5.1         3.5
4: 2          4.9         3.0
5: 3          4.7         3.2
6: 4          4.6         3.1
7: 5          5.0         3.6
8: 6          5.4         3.9

subset 列名で絞り込み

1: > iris %>% subset(select=c(Sepal.Length, Sepal.Width)) %>% head
2:   Sepal.Length Sepal.Width
3: 1          5.1         3.5
4: 2          4.9         3.0
5: 3          4.7         3.2
6: 4          4.6         3.1
7: 5          5.0         3.6
8: 6          5.4         3.9

subset 除外列名で絞り込み

1: > iris %>% subset(select=c(-Sepal.Length, -Sepal.Width)) %>% head
2:   Petal.Length Petal.Width Species
3: 1          1.4         0.2  setosa
4: 2          1.4         0.2  setosa
5: 3          1.3         0.2  setosa
6: 4          1.5         0.2  setosa
7: 5          1.4         0.2  setosa
8: 6          1.7         0.4  setosa

subset 正規表現を利用して絞り込み(結局は列名での抽出と同じ)

1: > iris %>% subset(select=grep("^S", colnames(iris))) %>% head
2:   Sepal.Length Sepal.Width Species
3: 1          5.1         3.5  setosa
4: 2          4.9         3.0  setosa
5: 3          4.7         3.2  setosa
6: 4          4.6         3.1  setosa
7: 5          5.0         3.6  setosa
8: 6          5.4         3.9  setosa
R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します。条件指定の主なパラメータは、「subset」と「select」です。「subset」では行を抽出するための条件式、「select」では列を抽...

まとめ

  • tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使う。
  • select関数は、様々な指定方法で絞り込みができて、条件を満たす列を絞り込む。
  • ヘルパー関数を利用すると、列名と文字列条件のマッチや正規表現を利用した絞り込みが簡単に行える。
  • Rの標準的な操作subset関数で、selectオプションに条件を指定すると、同じようにな操作が行える。

論文・データ解析の支援

個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。

とにかく早く問題解決したい人はこちら>>直接、データ解析相談
とにかく早く問題解決したい人はこちら>>こちらで論文相談

関連記事

r tidyverse 使い方 | 列分割 separate関数 - tidyrパッケージ
tidyverseで1つの列(文字列型)を分割して別の列に分けるには、tidyrパッケージのseparate関数を使います。separate関数は、「指定した列」を「指定した区切り文字」で分割します。Rの標準的な操作strsplit関数を使...
r tidyverse 使い方 | 行 グループ毎の処理 group_by関数 - dplyrパッケージ
tidyverseでデータフレームをグループ別に処理する場合、dplyrパッケージのgroup_by関数を使います。group_by関数以降の処理では、グループ毎に計算が行われます。Rの標準的な操作なら、apply系関数を使って同じような処...
r tidyverse 使い方 | データフレーム重複行を削除 distinct関数 - dplyrパッケージ
tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct関数を使います。重複をチェックする列名を指定し、重複が見つかった行は最初に見つかったデータを残して、それ以外は削除されます。Rの標準的な操作な...
r tidyverse 使い方 | 列の追加 mutate関数 - dplyrパッケージ
tidyverseでデータフレームに列を追加する場合は、dplyrパッケージのmutate関数を使います。新しい列を追加したり、既にある列に上書きすることができます。また、transmutateという関数を使った場合は、列を追加しつつ、se...
r tidyverse 使い方 | 行のソート arrange関数 - dplyrパッケージ
tidyverseで1つのデータフレームに対する行のソートは、dplyrパッケージのarrange関数を使います。arrange関数は、データフレームの行をソートする関数です。エクセルの行の並べ替えのように、優先度の高いものから複数の条件を...
r tidyverse 使い方 | 2つのデータフレーム結合 inner_join関数 - dplyrパッケージ
tidyverseで2つのデータフレームの結合は、dplyrパッケージのjoin系関数を使います。キーが共通する部分を結合するinner_join関数がよく使われます。2つのデータフレームの結合条件によって、その他のjoin系関数を使い分け...
dplyr filter関数で行の絞り込み | r tidyverse 使い方
dplyrパッケージのfilter関数をつかえば、データフレームの行の絞り込みができます。指定した条件を満たす行を絞り込みます。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。 条件式では、論理演算&(AND)や、|(OR)...
tidyverse csv・tsvのファイルの読み方・データ型の指定方法 readrパッケージ
tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みますが...
tidyverse インストールとロード tidyverseの主なパッケージ
tidyverseはRのパッケージの1つで、データ操作(抽出・連結など)を統合的に扱うためのツール群です。Rを起動後に、tidyverseのインストールを行います。インストール完了後は、使うときにパッケージをロードして使います。 とにかく早...
タイトルとURLをコピーしました