はじめに
この記事はきれいなTableを作るためのパッケージgtについての解説記事になります。対象者としては、
- いままでRを使ったデータ解析をしてきた人
- Rの(特にtidyverse)の美しい描画システムになれてしまった人
- 宗教上の理由でExcelが使用できない人、嫌いな人 を想定しています。
苦悩
Hadley信者の皆さんは今日も恐らくtidyverse脳になりながらデータ解析やきれいなグラフをバシバシ作っていることと思います。しかし、見せる用の表づくりとなると結構難しいところがあります。
私も、「tidy dataから必要なグラフはできたし、検定も行った。でも表がなんか物足りない...」「結局、ボスに見せるときはExcelでセル結合して表を作らないといけないのかなぁ...」などと思っていました。今までは
gt、やばい
そんな折、gt パッケージ {gt} に出会いました。このパッケージは、data.tableやtibbleと言った表データを元に、gt オブジェクトなるものを介して見栄えの良い表をhtmlやLataxで作る事ができるパッケージ群になっています。
gtとは"Grammar of tables"の略であり(ガチの略ではない)、"Grammar of Graphics"を標榜するggplotの表バージョンを目指しているそうです。
コンセプトとしては、Easily generate information-rich, publication-quality tables from R (出版に耐えうる情報豊富なTableを簡単にRで作ろうや)となっています。
from 公式ホームページ
このパッケージ、はっきり言ってすごいです。まずはこちらをご覧ください。
美しい...まるでTable版ggplot2ではないか...
さらに、下の図を見ていただけるとわかるのですが、このTableかなり細かいところまで弄ることができます!
関数一覧
from 公式ホームページ
今まで、データの前処理をtidyverseのパッケージ群で行った後、Tableを人間に見やすいよう整えるためにExcelでまとめたりしていました。
しかし、このパッケージのおかげで前処理 → グラフ出力 → 生データを見やすいようにTable整形という一連の流れをすべてR上で行えるようになりました。
まだまだ発展途上のパッケージですが、布教も兼ねて解説記事を作製しました!
解説動画もあるよ
ここの動画で解説がされていますのでぜひご覧ください。凄さがわかると思います。
インストール方法
このパッケージはGitHubからinstallする必要があります。
source("https://install-github.me/rstudio/gt")
2020/04/09 追記
gt packageがv0.2にアップデートされ、CRANからのインストールが可能となりました!
install.packages("gt")
と打ち込むことで自動的にinstallされます
テストデータとして、動画でも使われているexibbleが入っていますのでこれを使って実際に美しいTableを作って見ましょう。
実際の使い方
0. まずはデフォルトで
library(tidyverse)
library(gt)
exibble
# A tibble: 8 x 9
num char fctr date time datetime currency row group
<dbl> <chr> <fct> <chr> <chr> <chr> <dbl> <chr> <chr>
1 0.111 apricot one 2015-01-15 13:35 2018-01-01 02:22 50.0 row_1 grp_a
2 2.22 banana two 2015-02-15 14:40 2018-02-02 14:33 18.0 row_2 grp_a
3 33.3 coconut three 2015-03-15 15:45 2018-03-03 03:44 1.39 row_3 grp_a
4 444. durian four 2015-04-15 16:50 2018-04-04 15:55 65100 row_4 grp_a
5 5550 NA five 2015-05-15 17:55 2018-05-05 04:00 1326. row_5 grp_b
6 NA fig six 2015-06-15 NA 2018-06-06 16:11 13.3 row_6 grp_b
7 777000 grapefruit seven NA 19:10 2018-07-07 05:22 NA row_7 grp_b
8 8880000 honeydew eight 2015-08-15 20:20 NA 0.44 row_8 grp_b
これにgt()を適用させるとtableが作製されています。
library(tidyverse)
library(gt)
exibble %>% gt()
もうなんか既にイイカンジになってますが、さらにきれいにしていきましょう。
1. グループ分け
library(tidyverse)
library(gt)
tab_group <- exibble %>%
gt(
rowname_col = "row",
groupname_col = "group"
)
tab_group
group列
に合わせてTableを2分割しました。ついでに各行をrowで分けています。
2. 数字の変更
num列
の数字が少し読みにくいので、わかりやすい指数表記に変更しましょう。fmt_scientific()
を使います
tab_scientific <- tab_group %>%
fmt_scientific(
columns = vars(num),
decimals = 2
)
tab_scientific
3. 日付の変更
日付のフォーマットはfmt_date()
で変更できます。date_style =
で様々なフォーマットに変えられます。
tab_date <- tab_scientific %>%
fmt_date(
columns = vars(date),
date_style = 13)
tab_date
ただ、日本語に対してはまだまだ微妙という印象です。(年は対応しているが日に対応していない、年月日の順番となるフォーマットが存在しない、など)
4. 通貨記号の追加
数値列に通貨記号を追加したい場合はfmt_currency()
を使います。currency =
で通貨コードを指定します。
例えば円マークなら...
tab_currency <- tab_date %>%
fmt_currency(
columns = vars(currency),
currency = "JPY"
)
tab_currency
coconut 1円、durian6万円という意味のわからない状況になってますが、(動画では英ポンドdate_style = "GBP"
で指定していました。)
小数点以下が四捨五入され、3桁ごとにカンマが打たれています。
5. 注釈の追加
表への注釈もできます。tab_footnote =
でcell単位あるいはcolumn, row単位で注釈をつけることができます。注釈をつける条件も指定できるのでかなり便利。
tab_footnote <- tab_currency %>%
tab_footnote(
footnote = "激安!",
locations = cells_data(
columns = vars(currency),
rows = currency < 100 # 価格が100未満のものにのみ注釈
)
) %>%
tab_footnote(
footnote = "高い...!",
locations = cells_data(
columns = vars(currency),
rows = currency > 10000 # 価格が10000より大きいのものにのみ注釈
)
) %>%
tab_footnote(
footnote = "果物の価格について",
locations = cells_column_labels( # カラムにラベルとしてつける
columns = vars(currency)
)
)
tab_footnote
6. NAの変更
このデータではNA(欠損値が)含まれています。これを別の文字に置き換えたい場合、fmt_missing()
が有効です。例えば、missing_text = "-"
とすることで、NAをハイフンに置換できます。
tab_NA <- tab_footnote %>%
fmt_missing(columns = everything(),
missing_text = "-")
tab_NA
columns = everything()
を指定することで全カラムについてのNAをハイフンに変えています。
7. タイトルの作製
かなりいい感じになってきたのでタイトルを付けましょう。タイトルはtab_header()
で加えることができます。しかも、md()
関数を用いてでmarkdown形式で書くことにより斜体や太字にも対応しています!
tab_Title <- tab_NA %>%
tab_header(
title = "Table",
subtitle = md("きれいな*Table*は**gt パッケージ**で決まり!")
)
tab_Title
8. pdfで保存
完成したらgtsave()
で保存! png, htmlおよびpdf(Latexが必要)での出力が可能です。
gtsave(tab_Title, "完成品.pdf")
さいごに
いかがでしょう?かなり見た目の良いTableを出力できたのではないでしょうか。本パッケージは洗練されるべき余地を残していますが、現行でも十分扱いきれるパッケージだと思います。皆さんもgt packageで楽しいTable整形lifeを送りませんか?
参考文献
https://github.com/rstudio/gt
https://www.rdocumentation.org/packages/gt/versions/0.1.0
https://resources.rstudio.com/rstudio-conf-2019/introducing-the-gt-package