「Rを用いたデータハンドリングと可視化」ハンズオン<(a.k.a. kazutan.R)でLTしてきました。
これは、dplyr 0.7.0のリリース時にvignetteに追加された内容です。和訳を更新しているときに読んで、なるほどなあと思ったので紹介してみました。なので、↑のスライドで話したのはこのvignetteに書かれている内容です。よければこちらも併せてお読みください。
Introduction to dplyr(和訳) https://t.co/4vlNqOQIWy 最新版の内容を反映。select/mutateのセマンティクスの違いについての記述が増えていて、勉強になりました。が、うまく訳せている自信ないので変なとこあればご指摘ください。。
— Hiroaki Yutani (@yutannihilation) 2017年7月12日
個人的な学び
ちなみに、今日のkazutan.Rでの学びは、select()
では1つの引数に複数の列を指定できることでした。
library("dplyr", quietly = TRUE) select(iris, col = c(1, 5)) %>% head #> col1 col2 #> 1 5.1 setosa #> 2 4.9 setosa #> 3 4.7 setosa #> 4 4.6 setosa #> 5 5.0 setosa #> 6 5.4 setosa select(iris, col = c(Sepal.Length, Species)) %>% head #> col1 col2 #> 1 5.1 setosa #> 2 4.9 setosa #> 3 4.7 setosa #> 4 4.6 setosa #> 5 5.0 setosa #> 6 5.4 setosa
知らなかった…。
こんな感じで、具体的にどの列がどの順番で選ばれたのかも分からないまま新しい列名にすることすらできます。よい子はマネしないでね感。
select(iris, col = starts_with("s")) %>% head #> col1 col2 col3 #> 1 5.1 3.5 setosa #> 2 4.9 3.0 setosa #> 3 4.7 3.2 setosa #> 4 4.6 3.1 setosa #> 5 5.0 3.6 setosa #> 6 5.4 3.9 setosa
勉強になりました。
余談
余談ですが、rename()
もselectのセマンティクスです、と言ったものの、どうもしっくりこない違いがあります。例えば、以下はエラーになります。
rename(iris, x = 1) #> Error: `x` = 1 must be a symbol or a string, not a double vector
select(iris, x = 1)
は問題なくできる、というか、まさにこの列の位置を表すことこそがselectのセマンティクスの本質のはずなので、なぜ??と混乱しています。とりあえずissueを立てたりしてみたんですが、これをrename()
ではエラーにしなければならない理由をご存知の方、教えてください。ほんとに悩んでいます…