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関数が同じように使える。