メモ:dplyr 0.6.0は、select()するだけならtidyevalいらないっぽい
dplyrがもうCRANにsubmitされたという噂を聞いてNEWS.mdを読んでたら、こんなことが書かれていました。
select()
(and the internal functionselect_vars()
) now support column names in addition to column positions. As a result, expressions likeselect(mtcars, "cyl")
are now allowed.
説明の意味はあんまり理解できないんですが、こんな感じです。select()
とselect_()
の使い分けで悩んでいた時代はもう過去ですね。
library(dplyr) # 列名を変数名として指定 select(starwars, name, birth_year) #> # A tibble: 87 x 2 #> name birth_year #> <chr> <dbl> #> 1 Luke Skywalker 19.0 #> 2 C-3PO 112.0 #> 3 R2-D2 33.0 #> 4 Darth Vader 41.9 #> 5 Leia Organa 19.0 #> 6 Owen Lars 52.0 #> 7 Beru Whitesun lars 47.0 #> 8 R5-D4 NA #> 9 Biggs Darklighter 24.0 #> 10 Obi-Wan Kenobi 57.0 #> # ... with 77 more rows
# 列名を文字列として指定 select(starwars, c("name", "birth_year")) #> # A tibble: 87 x 2 #> name birth_year #> <chr> <dbl> #> 1 Luke Skywalker 19.0 #> 2 C-3PO 112.0 #> 3 R2-D2 33.0 #> 4 Darth Vader 41.9 #> 5 Leia Organa 19.0 #> 6 Owen Lars 52.0 #> 7 Beru Whitesun lars 47.0 #> 8 R5-D4 NA #> 9 Biggs Darklighter 24.0 #> 10 Obi-Wan Kenobi 57.0 #> # ... with 77 more rows
# 列名を変数に入れてそれを指定 col <- c("name", "birth_year") select(starwars, col) #> # A tibble: 87 x 2 #> name birth_year #> <chr> <dbl> #> 1 Luke Skywalker 19.0 #> 2 C-3PO 112.0 #> 3 R2-D2 33.0 #> 4 Darth Vader 41.9 #> 5 Leia Organa 19.0 #> 6 Owen Lars 52.0 #> 7 Beru Whitesun lars 47.0 #> 8 R5-D4 NA #> 9 Biggs Darklighter 24.0 #> 10 Obi-Wan Kenobi 57.0 #> # ... with 77 more rows
全部混ぜてもいける…
select(starwars, col, hair_color, "species") #> # A tibble: 87 x 4 #> name birth_year hair_color species #> <chr> <dbl> <chr> <chr> #> 1 Luke Skywalker 19.0 blond Human #> 2 C-3PO 112.0 <NA> Droid #> 3 R2-D2 33.0 <NA> Droid #> 4 Darth Vader 41.9 none Human #> 5 Leia Organa 19.0 brown Human #> 6 Owen Lars 52.0 brown, grey Human #> 7 Beru Whitesun lars 47.0 brown Human #> 8 R5-D4 NA <NA> Droid #> 9 Biggs Darklighter 24.0 black Human #> 10 Obi-Wan Kenobi 57.0 auburn, white Human #> # ... with 77 more rows
謎の便利さにたじろぎますが、dplyr 0.6.0のリリースはもうすぐです。備えよう。