dplyr filter関数で行の絞り込み | r tidyverse 使い方

スポンサーリンク

dplyrパッケージのfilter関数をつかえば、データフレームの行の絞り込みができます。指定した条件を満たす行を絞り込みます。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。

条件式では、論理演算&(AND)や、|(OR)を組み合わせて使うことができます。否定する場合は!を使います。

Rの標準的な操作subset関数と同じように使えます。

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

dplyr filter関数を使って条件を満たす行を絞り込む

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

書式

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

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

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

dplyr 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

dplyr filter関数を使って文字列を部分マッチで絞り込み

filter関数に文字列探索の条件を指定して、条件を満たした行を絞り込んでいます。絞り込んだ条件は、「str_detect(Species, “ini”」で、Species factorが”virginica”に一致するものだけ抽出されます。

   iris %>% filter(str_detect(Species, "ini")) %>% head
     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
   1          6.3         3.3          6.0         2.5 virginica
   2          5.8         2.7          5.1         1.9 virginica
   3          7.1         3.0          5.9         2.1 virginica
   4          6.3         2.9          5.6         1.8 virginica
   5          6.5         3.0          5.8         2.2 virginica
   6          7.6         3.0          6.6         2.1 virginica 

dplyr 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の標準的な操作|dplyr filter関数を使わない方法

データフレームから条件をみたす行の絞り込みを行う場合、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からの条件指定による行・列の抽出

まとめ

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

論文・データ解析の支援

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

関連記事

スポンサーリンク
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系関数を使い分け...
r tidyverse 使い方 | 列 filter 絞り込み select関数 - dplyrパッケージ
tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使います。selectは条件を満たす列を絞り込む関数です。様々な指定方法で絞り込みができます。列名と文字列条件のマッチや正規表現を利用した絞り...
tidyverse csv・tsvのファイルの読み方・データ型の指定方法 readrパッケージ
tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みますが...
tidyverse インストールとロード tidyverseの主なパッケージ
tidyverseはRのパッケージの1つで、データ操作(抽出・連結など)を統合的に扱うためのツール群です。Rを起動後に、tidyverseのインストールを行います。インストール完了後は、使うときにパッケージをロードして使います。 とにかく早...
タイトルとURLをコピーしました