👻
filterとselectの使い方(R)(随時更新)
filterとselectのちょっと応用的な使い方
関数を作ったり、列数の多いデータを扱ったりしていると、“一定の法則で作成・抽出した文字列を使用してfilter
をかけたりselect
したりしたい”というニーズがよく出てきます。
これまでその都度ネットで調べたりして対応してきましたが、ここらで各方法をまとめてネットに還元しようと思いました。
逆引き事典的な使い方ができれば自分にとっても便利ですので。
library(tidyverse)
変数で指定した列に対してfilterをかける。
変数に格納した文字列の列名を使用してfilter
をかけます。
sw <- head(starwars)
sw
#> # A tibble: 6 × 14
#> name height mass hair_color skin_color eye_color birth_year sex gender
#> <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke Sky… 172 77 blond fair blue 19 male mascu…
#> 2 C-3PO 167 75 <NA> gold yellow 112 none mascu…
#> 3 R2-D2 96 32 <NA> white, bl… red 33 none mascu…
#> 4 Darth Va… 202 136 none white yellow 41.9 male mascu…
#> 5 Leia Org… 150 49 brown light brown 19 fema… femin…
#> 6 Owen Lars 178 120 brown, gr… light blue 52 male mascu…
#> # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#> # vehicles <list>, starships <list>
hair_color
に含まれる欠損値を除外してみます。
nm <- "hair_color"
sw |>
filter(if_any(all_of(nm), \(x) !is.na(x)))
#> # A tibble: 4 × 14
#> name height mass hair_color skin_color eye_color birth_year sex gender
#> <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 Luke Sky… 172 77 blond fair blue 19 male mascu…
#> 2 Darth Va… 202 136 none white yellow 41.9 male mascu…
#> 3 Leia Org… 150 49 brown light brown 19 fema… femin…
#> 4 Owen Lars 178 120 brown, gr… light blue 52 male mascu…
#> # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#> # vehicles <list>, starships <list>
Discussion