tidyverse – filter関数でデータフレームの行を絞り込む dplyrパッケージ

tidyverseで1つのデータフレームに対する行の絞り込みは、dplyrパッケージのfilter関数を使います。filter関数は、指定した条件を満たす行を絞り込む関数です。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。条件式では、論理演算&(AND)や、|(OR)を組み合わせて使うことができます。否定する場合は!を使います。Rの標準的な操作subset関数と同じように使えます。

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

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

書式

filter関数は、第1引数にデータ、第2引数以降に絞り込みの条件を複数指定できます。複数の条件を指定した場合は、全ての条件を満たす行が抽出されます。尚、パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。

> filter(データ, 条件1, 条件2, ...)

> データ %>% filter(条件1, 条件2, ...)

filter 単純な絞り込み

filter関数に1つの条件を指定して、条件を満たした行を絞り込んでいます。絞り込んだ条件は、「Species == “virginica”」で、Species factorが”virginica”に一致するものだけ抽出されます。

 1: > library(tidyverse)
 2: 
 3: > iris %>% filter(Species == "virginica") %>% head
 4:   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
 5: 1          6.3         3.3          6.0         2.5 virginica
 6: 2          5.8         2.7          5.1         1.9 virginica
 7: 3          7.1         3.0          5.9         2.1 virginica
 8: 4          6.3         2.9          5.6         1.8 virginica
 9: 5          6.5         3.0          5.8         2.2 virginica
10: 6          7.6         3.0          6.6         2.1 virginica

filter 複数の条件を指定

filter関数に複数の条件を指定して、条件を満たした行を絞り込んでいます。絞り込んだ条件は、「Species == “virginica”」と「Sepal.Length > 7.0」で、2つの条件を満たすデータだけが抽出されます。

1: > iris %>% filter(Species == "virginica", Sepal.Length > 7.0) %>% head
2:   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
3: 1          7.1         3.0          5.9         2.1 virginica
4: 2          7.6         3.0          6.6         2.1 virginica
5: 3          7.3         2.9          6.3         1.8 virginica
6: 4          7.2         3.6          6.1         2.5 virginica
7: 5          7.7         3.8          6.7         2.2 virginica
8: 6          7.7         2.6          6.9         2.3 virginica

論理演算を指定した複雑な条件指定

filter関数では、論理演算子を組み合わせて条件を指定することができます。条件式では、論理演算&(AND)や、|(OR)を組み合わせて、より複雑な条件を指定することができます。

and 条件

論理演算&(AND)を使って、2つの条件を連結しました。それぞれの条件を同時にみたす行だけが抽出されました。

1: > iris %>% filter(Species == "virginica" & Sepal.Length > 7.0) %>% head
2:   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
3: 1          7.1         3.0          5.9         2.1 virginica
4: 2          7.6         3.0          6.6         2.1 virginica
5: 3          7.3         2.9          6.3         1.8 virginica
6: 4          7.2         3.6          6.1         2.5 virginica
7: 5          7.7         3.8          6.7         2.2 virginica
8: 6          7.7         2.6          6.9         2.3 virginica

or 条件

論理演算|(OR)を使って、2つの条件を連結しました。それぞれの条件どちらかをみたす行だけが抽出されました。

 1: > iris %>% filter(Species == "versicolor" | Sepal.Length > 7.0)
 2:    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
 3: ...省略...
 4: 48          6.2         2.9          4.3         1.3 versicolor
 5: 49          5.1         2.5          3.0         1.1 versicolor
 6: 50          5.7         2.8          4.1         1.3 versicolor
 7: 51          7.1         3.0          5.9         2.1  virginica
 8: 52          7.6         3.0          6.6         2.1  virginica
 9: 53          7.3         2.9          6.3         1.8  virginica
10: ...省略...

否定条件

論理演算!(NOT)を使って、条件を否定しました。否定条件みたす行だけが抽出されました。

 1: > iris %>% filter(!(Species == "versicolor"))
 2:     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
 3: ...省略...
 4: 48           4.6         3.2          1.4         0.2    setosa
 5: 49           5.3         3.7          1.5         0.2    setosa
 6: 50           5.0         3.3          1.4         0.2    setosa
 7: 51           6.3         3.3          6.0         2.5 virginica
 8: 52           5.8         2.7          5.1         1.9 virginica
 9: 53           7.1         3.0          5.9         2.1 virginica
10: ...省略...

こちらの書き方でも、同じ条件で抽出されます。

 1: > iris %>% filter(Species != "versicolor")
 2:     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
 3: ...省略...
 4: 48           4.6         3.2          1.4         0.2    setosa
 5: 49           5.3         3.7          1.5         0.2    setosa
 6: 50           5.0         3.3          1.4         0.2    setosa
 7: 51           6.3         3.3          6.0         2.5 virginica
 8: 52           5.8         2.7          5.1         1.9 virginica
 9: 53           7.1         3.0          5.9         2.1 virginica
10: ...省略...

Rの標準的な操作

データフレームから条件をみたす行の絞り込みを行う場合、Rの標準的な方法ではsubset関数を使います。第1引数にデータ、第2引数に絞り込みの条件を与えます。条件式では、論理演算&(AND)や、|(OR)を組み合わせて使うことができます。

 1: > subset(iris, Species == "virginica" & Sepal.Length > 7.0)
 2:     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
 3: 103          7.1         3.0          5.9         2.1 virginica
 4: 106          7.6         3.0          6.6         2.1 virginica
 5: 108          7.3         2.9          6.3         1.8 virginica
 6: 110          7.2         3.6          6.1         2.5 virginica
 7: 118          7.7         3.8          6.7         2.2 virginica
 8: 119          7.7         2.6          6.9         2.3 virginica
 9: 123          7.7         2.8          6.7         2.0 virginica
10: 126          7.2         3.2          6.0         1.8 virginica
11: 130          7.2         3.0          5.8         1.6 virginica
12: 131          7.4         2.8          6.1         1.9 virginica
13: 132          7.9         3.8          6.4         2.0 virginica
14: 136          7.7         3.0          6.1         2.3 virginica

【関連】R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

まとめ

  • tidyverseで1つのデータフレームに対する行の絞り込みは、dplyrパッケージのfilter関数を使う。
  • filter関数は、指定した条件を満たす行、複数指定した場合は条件の全てを満たす行を絞り込む。
  • 条件式では、論理演算&(AND)や、|(OR)を組み合わせて複雑な条件を指定可能。否定は「!」をつける。
  • Rの標準的な操作subset関数と同じように使える。



ピックアップ記事

  1. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…
  2. tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

    tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct…
  3. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…

人気記事

  1. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…