はじめに
dplyr、大好きです。
dplyrと素晴らしい解説記事には大変お世話になっていますが、まだまだdplyrの実力の1割程度も引き出せてあげられていない気がしています。
この記事は、個人的に「便利そうだが咄嗟に出てこない」dplyr関数の使い方を書き留めておき、慣れるまでの参照先にするために書きます。
そして遠い未来、dplyrを使いこなした自分がこの記事を見返したとき、成長した感を味わいたいなァと思ってます。
間違ってること書いてたらご指摘いただけると嬉しいです。
dplyr::rename()
列の改名をしてくれる関数。
iris %>% dplyr::rename(sp = Species) %>% head(2)
# Sepal.Length Sepal.Width Petal.Length Petal.Width sp
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# これだと長い
cname <- colnames(iris)
cname[length(cname)] <- "sp"
colnames(iris) <- cname
dplyr::pull()
data.frameの一列を指定してvectorとして返してくれる関数。
vectorを引数として受け取る関数に渡す際にすっきり書けそう。
iris %>% head(10) %>% dplyr::pull(Sepal.Length)
# [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
# これだとちょっとかっこ悪い
sl <- iris %>% head(10) %>% select(Sepal.Length)
sl[, 1]
dplyr::summarise_all()
すべての列に関数を適用し、それらの結果を1行のdata.frameとしてくれる関数。
group_byされてたらグループごとに結果を返す。
summarise_at, summarise_if で関数を適用する列を指定できるのでこれが便利そう。
iris %>% select(1:4) %>%
dplyr::summarise_all(funs(min, max))
# Sepal.Length_min Sepal.Width_min Petal.Length_min Petal.Width_min Sepal.Length_max
# 1 4.3 2 1 0.1 7.9
# Sepal.Width_max Petal.Length_max Petal.Width_max
# 1 4.4 6.9 2.5
# これだとかっこ悪い
for (i in seq(ncol(iris))) {
for (fun in c(min, max)) {
...
}
}
dplyr::case_when()
Cのswitch-caseのような関数。
if {} else if {} else if {}...をすっきり書けるとのことなので、mutate等の中で便利そう。
iris_ <- iris %>%
mutate(
BigPet = case_when(
(Petal.Length > 5.0 & Petal.Width > 2.0) ~ TRUE,
TRUE ~ FALSE
)
)
随時書き足していく予定。
参考文献
https://heavywatal.github.io/rstats/plyr.html
https://kazutan.github.io/kazutanR/hands_on_170730/mutate.html