はじめに
ついにdplyrのVersion 1.0.0がCRANにリリースされました!!
以前のdplyrと挙動が大きく変わっておりますので、主な新しい機能をまとめたいと思います。
dplyrとは?
表データをさくさく処理するためのRのパッケージのこと。
これを使うともうpandasには戻れない。。。(個人の感想です)
インストール&ロード
まずは、tidyverseを以下のコードでインストール&ロードしましょう。
※tidyverseは、データ処理を簡単にしてくれるパッケージ群の総称でその中の一つがdplyrです。
install.packages("tidyverse")
library(tidyverse)
データ
本記事で使用するデータは、みんな大好き、diamondsです!
diamonds
# A tibble: 53,940 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
summarise
summariseは旧バージョンでは、主にgroup_byでグルーピングした後の基本統計量(合計とか平均)を算出するのに使用されていました。
旧バージョンでは、関数を適用した後の出力が、スカラー(要素数が1のベクトル)となる関数しか使用することができませんでした。
diamonds %>%
group_by(color) %>%
summarise(price_mean = mean(price))
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 7 x 2
color price_mean
<ord> <dbl>
1 D 3170.
2 E 3077.
3 F 3725.
4 G 3999.
5 H 4487.
6 I 5092.
7 J 5324.
新バージョンでは、出力がベクトルやtibbleでも受け付けてくれます!
diamonds %>%
group_by(color) %>%
summarise(price_range = range(price))
`summarise()` regrouping output by 'color' (override with `.groups` argument)
# A tibble: 14 x 2
# Groups: color [7]
color price_range
<ord> <int>
1 D 357
2 D 18693
3 E 326
4 E 18731
5 F 342
6 F 18791
7 G 354
8 G 18818
9 H 337
10 H 18803
11 I 334
12 I 18823
13 J 335
14 J 18710
diamonds %>%
group_by(color) %>%
summarise(tibble(min = min(price), max = max(price)))
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 7 x 3
color min max
<ord> <int> <int>
1 D 357 18693
2 E 326 18731
3 F 342 18791
4 G 354 18818
5 H 337 18803
6 I 334 18823
7 J 335 18710
select
指定の列を抽出します。
列を型で指定するのが旧バージョンに比べて楽になりました。
#numeric型の列を抽出する
diamonds %>%
select(where(is.numeric))
# A tibble: 53,940 x 7
carat depth table price x y z
<dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 61.5 55 326 3.95 3.98 2.43
2 0.21 59.8 61 326 3.89 3.84 2.31
3 0.23 56.9 65 327 4.05 4.07 2.31
4 0.290 62.4 58 334 4.2 4.23 2.63
5 0.31 63.3 58 335 4.34 4.35 2.75
6 0.24 62.8 57 336 3.94 3.96 2.48
7 0.24 62.3 57 336 3.95 3.98 2.47
8 0.26 61.9 55 337 4.07 4.11 2.53
9 0.22 65.1 61 337 3.87 3.78 2.49
10 0.23 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
#numeric型以外の列を抽出する
diamonds %>%
select(!where(is.numeric))
# A tibble: 53,940 x 3
cut color clarity
<ord> <ord> <ord>
1 Ideal E SI2
2 Premium E SI1
3 Good E VS1
4 Premium I VS2
5 Good J SI2
6 Very Good J VVS2
7 Very Good I VVS1
8 Very Good H SI1
9 Fair E VS2
10 Very Good H VS1
# ... with 53,930 more rows
もちろん、旧バージョンのstarts_withなどと併用することも可能!!
#numeric型でかつ、列名の先頭がpの列を抽出する
diamonds %>%
select(where(is.numeric) & starts_with("p"))
# A tibble: 53,940 x 1
price
<int>
1 326
2 326
3 327
4 334
5 335
6 336
7 336
8 337
9 337
10 338
# ... with 53,930 more rows
rename
rename_withで以前よりも簡単にリネームできるように。
#すべての列名を大文字にする
diamonds %>%
rename_with(toupper)
# A tibble: 53,940 x 10
CARAT CUT COLOR CLARITY DEPTH TABLE PRICE X Y Z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
列名を指定することも可能
#color, priceを大文字にする
diamonds %>%
rename_with(toupper, c(color, price))
# A tibble: 53,940 x 10
carat cut COLOR clarity depth table PRICE x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
#numeric型を大文字にする
diamonds %>%
rename_with(toupper, where(is.numeric))
# A tibble: 53,940 x 10
CARAT cut color clarity DEPTH TABLE PRICE X Y Z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
relocate
relocateは、新バージョンからの新しい関数で列の順番を変えるときに使用する。
以前はselectで頑張って列の順番を変えていたが、relocateを使うとより簡単にできるかも。
#y,zを前に持ってくる
diamonds %>%
relocate(y, z)
# A tibble: 53,940 x 10
y z carat cut color clarity depth table price x
<dbl> <dbl> <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl>
1 3.98 2.43 0.23 Ideal E SI2 61.5 55 326 3.95
2 3.84 2.31 0.21 Premium E SI1 59.8 61 326 3.89
3 4.07 2.31 0.23 Good E VS1 56.9 65 327 4.05
4 4.23 2.63 0.290 Premium I VS2 62.4 58 334 4.2
5 4.35 2.75 0.31 Good J SI2 63.3 58 335 4.34
6 3.96 2.48 0.24 Very Good J VVS2 62.8 57 336 3.94
7 3.98 2.47 0.24 Very Good I VVS1 62.3 57 336 3.95
8 4.11 2.53 0.26 Very Good H SI1 61.9 55 337 4.07
9 3.78 2.49 0.22 Fair E VS2 65.1 61 337 3.87
10 4.05 2.39 0.23 Very Good H VS1 59.4 61 338 4
# ... with 53,930 more rows
#numeric型を前に持ってくる
diamonds %>%
relocate(where(is.numeric))
# A tibble: 53,940 x 10
carat depth table price x y z cut color clarity
<dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <ord> <ord> <ord>
1 0.23 61.5 55 326 3.95 3.98 2.43 Ideal E SI2
2 0.21 59.8 61 326 3.89 3.84 2.31 Premium E SI1
3 0.23 56.9 65 327 4.05 4.07 2.31 Good E VS1
4 0.290 62.4 58 334 4.2 4.23 2.63 Premium I VS2
5 0.31 63.3 58 335 4.34 4.35 2.75 Good J SI2
6 0.24 62.8 57 336 3.94 3.96 2.48 Very Good J VVS2
7 0.24 62.3 57 336 3.95 3.98 2.47 Very Good I VVS1
8 0.26 61.9 55 337 4.07 4.11 2.53 Very Good H SI1
9 0.22 65.1 61 337 3.87 3.78 2.49 Fair E VS2
10 0.23 59.4 61 338 4 4.05 2.39 Very Good H VS1
# ... with 53,930 more rows
位置を細かく指定したい場合は、.afterや.beforeを使用する
#priceの後にyを持ってくる
diamonds %>%
relocate(y, .after = price)
# A tibble: 53,940 x 10
carat cut color clarity depth table price y x z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.98 3.95 2.43
2 0.21 Premium E SI1 59.8 61 326 3.84 3.89 2.31
3 0.23 Good E VS1 56.9 65 327 4.07 4.05 2.31
4 0.290 Premium I VS2 62.4 58 334 4.23 4.2 2.63
5 0.31 Good J SI2 63.3 58 335 4.35 4.34 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.96 3.94 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.98 3.95 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.11 4.07 2.53
9 0.22 Fair E VS2 65.1 61 337 3.78 3.87 2.49
10 0.23 Very Good H VS1 59.4 61 338 4.05 4 2.39
# ... with 53,930 more rows
#priceの前にyを持ってくる
diamonds %>%
relocate(y, .before = price)
# A tibble: 53,940 x 10
carat cut color clarity depth table y price x z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <dbl> <int> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 3.98 326 3.95 2.43
2 0.21 Premium E SI1 59.8 61 3.84 326 3.89 2.31
3 0.23 Good E VS1 56.9 65 4.07 327 4.05 2.31
4 0.290 Premium I VS2 62.4 58 4.23 334 4.2 2.63
5 0.31 Good J SI2 63.3 58 4.35 335 4.34 2.75
6 0.24 Very Good J VVS2 62.8 57 3.96 336 3.94 2.48
7 0.24 Very Good I VVS1 62.3 57 3.98 336 3.95 2.47
8 0.26 Very Good H SI1 61.9 55 4.11 337 4.07 2.53
9 0.22 Fair E VS2 65.1 61 3.78 337 3.87 2.49
10 0.23 Very Good H VS1 59.4 61 4.05 338 4 2.39
# ... with 53,930 more rows
#最後の列の後にyを持ってくる
diamonds %>%
relocate(y, .after = last_col())
# A tibble: 53,940 x 10
carat cut color clarity depth table price x z y
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 2.43 3.98
2 0.21 Premium E SI1 59.8 61 326 3.89 2.31 3.84
3 0.23 Good E VS1 56.9 65 327 4.05 2.31 4.07
4 0.290 Premium I VS2 62.4 58 334 4.2 2.63 4.23
5 0.31 Good J SI2 63.3 58 335 4.34 2.75 4.35
6 0.24 Very Good J VVS2 62.8 57 336 3.94 2.48 3.96
7 0.24 Very Good I VVS1 62.3 57 336 3.95 2.47 3.98
8 0.26 Very Good H SI1 61.9 55 337 4.07 2.53 4.11
9 0.22 Fair E VS2 65.1 61 337 3.87 2.49 3.78
10 0.23 Very Good H VS1 59.4 61 338 4 2.39 4.05
# ... with 53,930 more rows
その他
ここでまとめたものは新バージョンのごく一部にすぎません!
私もまだほとんど把握できていないため、分かり次第、都度都度更新していく予定です!
SESSION INFORMATION
- Session info -------------------------------------------------------------------------------------------------------------------
setting value
version R version 3.6.3 (2020-02-29)
os Windows >= 8 x64
system x86_64, mingw32
ui RStudio
language (EN)
collate Japanese_Japan.932
ctype Japanese_Japan.932
tz Asia/Tokyo
date 2020-06-14
- Packages -----------------------------------------------------------------------------------------------------------------------
package * version date lib source
assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.3)
backports 1.1.7 2020-05-13 [1] CRAN (R 3.6.3)
blob 1.2.1 2020-01-20 [1] CRAN (R 3.6.3)
broom 0.5.6 2020-04-20 [1] CRAN (R 3.6.3)
callr 3.4.3 2020-03-28 [1] CRAN (R 3.6.3)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 3.6.3)
cli 2.0.2 2020-02-28 [1] CRAN (R 3.6.3)
colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.6.3)
crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.3)
DBI 1.1.0 2019-12-15 [1] CRAN (R 3.6.3)
dbplyr 1.4.4 2020-05-27 [1] CRAN (R 3.6.3)
desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.3)
devtools 2.3.0 2020-04-10 [1] CRAN (R 3.6.3)
digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.3)
dplyr * 1.0.0 2020-05-29 [1] CRAN (R 3.6.3)
ellipsis 0.3.1 2020-05-15 [1] CRAN (R 3.6.3)
evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.3)
fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.3)
forcats * 0.5.0 2020-03-01 [1] CRAN (R 3.6.3)
fs 1.4.1 2020-04-04 [1] CRAN (R 3.6.3)
generics 0.0.2 2018-11-29 [1] CRAN (R 3.6.3)
ggplot2 * 3.3.1 2020-05-28 [1] CRAN (R 3.6.3)
glue 1.4.1 2020-05-13 [1] CRAN (R 3.6.3)
gtable 0.3.0 2019-03-25 [1] CRAN (R 3.6.3)
haven 2.3.1 2020-06-01 [1] CRAN (R 3.6.3)
hms 0.5.3 2020-01-08 [1] CRAN (R 3.6.3)
htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.3)
httr 1.4.1 2019-08-05 [1] CRAN (R 3.6.3)
jsonlite 1.6.1 2020-02-02 [1] CRAN (R 3.6.3)
knitr 1.28 2020-02-06 [1] CRAN (R 3.6.3)
lattice 0.20-38 2018-11-04 [2] CRAN (R 3.6.3)
lifecycle 0.2.0 2020-03-06 [1] CRAN (R 3.6.3)
lubridate 1.7.9 2020-06-08 [1] CRAN (R 3.6.3)
magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.3)
memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.3)
modelr 0.1.8 2020-05-19 [1] CRAN (R 3.6.3)
munsell 0.5.0 2018-06-12 [1] CRAN (R 3.6.3)
nlme 3.1-144 2020-02-06 [2] CRAN (R 3.6.3)
pillar 1.4.4 2020-05-05 [1] CRAN (R 3.6.3)
pkgbuild 1.0.8 2020-05-07 [1] CRAN (R 3.6.3)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.3)
pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.3)
prettyunits 1.1.1 2020-01-24 [1] CRAN (R 3.6.3)
processx 3.4.2 2020-02-09 [1] CRAN (R 3.6.3)
ps 1.3.3 2020-05-08 [1] CRAN (R 3.6.3)
purrr * 0.3.4 2020-04-17 [1] CRAN (R 3.6.3)
R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.3)
Rcpp 1.0.4.6 2020-04-09 [1] CRAN (R 3.6.3)
readr * 1.3.1 2018-12-21 [1] CRAN (R 3.6.3)
readxl 1.3.1 2019-03-13 [1] CRAN (R 3.6.3)
remotes 2.1.1 2020-02-15 [1] CRAN (R 3.6.3)
renv 0.10.0 2020-05-06 [1] CRAN (R 3.6.3)
reprex 0.3.0 2019-05-16 [1] CRAN (R 3.6.3)
rlang 0.4.6 2020-05-02 [1] CRAN (R 3.6.3)
rmarkdown 2.1 2020-01-20 [1] CRAN (R 3.6.3)
rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.3)
rstudioapi 0.11 2020-02-07 [1] CRAN (R 3.6.3)
rvest 0.3.5 2019-11-08 [1] CRAN (R 3.6.3)
scales 1.1.1 2020-05-11 [1] CRAN (R 3.6.3)
sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.3)
stringi 1.4.6 2020-02-17 [1] CRAN (R 3.6.2)
stringr * 1.4.0 2019-02-10 [1] CRAN (R 3.6.3)
testthat 2.3.2 2020-03-02 [1] CRAN (R 3.6.3)
tibble * 3.0.1 2020-04-20 [1] CRAN (R 3.6.3)
tidyr * 1.1.0 2020-05-20 [1] CRAN (R 3.6.3)
tidyselect 1.1.0 2020-05-11 [1] CRAN (R 3.6.3)
tidyverse * 1.3.0 2019-11-21 [1] CRAN (R 3.6.3)
usethis 1.6.1 2020-04-29 [1] CRAN (R 3.6.3)
utf8 1.1.4 2018-05-24 [1] CRAN (R 3.6.3)
vctrs 0.3.0 2020-05-11 [1] CRAN (R 3.6.3)
withr 2.2.0 2020-04-20 [1] CRAN (R 3.6.3)
xfun 0.13 2020-04-13 [1] CRAN (R 3.6.3)
xml2 1.3.2 2020-04-23 [1] CRAN (R 3.6.3)
yaml 2.2.1 2020-02-01 [1] CRAN (R 3.6.3)