113
118

More than 3 years have passed since last update.

【R】ガチできれいなTableを作れるgtパッケージとは?

Last updated at Posted at 2020-02-02

はじめに

この記事はきれいなTableを作るためのパッケージgtについての解説記事になります。対象者としては、

  • いままでRを使ったデータ解析をしてきた人
  • Rの(特にtidyverse)の美しい描画システムになれてしまった人
  • 宗教上の理由でExcelが使用できない人、嫌いな人 を想定しています。

苦悩

Hadley信者の皆さんは今日も恐らくtidyverse脳になりながらデータ解析やきれいなグラフをバシバシ作っていることと思います。しかし、見せる用の表づくりとなると結構難しいところがあります。
私も、「tidy dataから必要なグラフはできたし、検定も行った。でも表がなんか物足りない...」「結局、ボスに見せるときはExcelでセル結合して表を作らないといけないのかなぁ...」などと思っていました。今までは

gt、やばい

そんな折、gt パッケージ {gt} に出会いました。このパッケージは、data.tableやtibbleと言った表データを元に、gt オブジェクトなるものを介して見栄えの良い表をhtmlLataxで作る事ができるパッケージ群になっています。
gtとは"Grammar of tables"の略であり(ガチの略ではない)、"Grammar of Graphics"を標榜するggplotの表バージョンを目指しているそうです。
コンセプトとしては、Easily generate information-rich, publication-quality tables from R (出版に耐えうる情報豊富なTableを簡単にRで作ろうや)となっています。

image.png
from 公式ホームページ

このパッケージ、はっきり言ってすごいです。まずはこちらをご覧ください。
image.png

美しい...まるでTable版ggplot2ではないか...

さらに、下の図を見ていただけるとわかるのですが、このTableかなり細かいところまで弄ることができます!
image.png

関数一覧

image.png

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. まずはデフォルトで

exibble.R
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が作製されています。

table.R
library(tidyverse)
library(gt)

exibble %>% gt()

Rplot02.png

もうなんか既にイイカンジになってますが、さらにきれいにしていきましょう。

1. グループ分け

group.R
library(tidyverse)
library(gt)

tab_group <- exibble %>% 
  gt(
  rowname_col = "row",
  groupname_col = "group"
  ) 

tab_group

Rplot04.png

group列に合わせてTableを2分割しました。ついでに各行をrowで分けています。

2. 数字の変更

num列の数字が少し読みにくいので、わかりやすい指数表記に変更しましょう。fmt_scientific()を使います

fmt_scientific.R

tab_scientific <- tab_group %>% 
  fmt_scientific(
    columns = vars(num),
    decimals = 2
  ) 

tab_scientific 

Rplot05.png

3. 日付の変更

日付のフォーマットはfmt_date()で変更できます。date_style =で様々なフォーマットに変えられます。

date.R

tab_date <- tab_scientific %>% 
  fmt_date(
    columns = vars(date),
    date_style = 13)

tab_date

Rplot01.png

ただ、日本語に対してはまだまだ微妙という印象です。(年は対応しているが日に対応していない、年月日の順番となるフォーマットが存在しない、など)

4. 通貨記号の追加

数値列に通貨記号を追加したい場合はfmt_currency()を使います。currency =で通貨コードを指定します。
例えば円マークなら...

currency.R

tab_currency <- tab_date %>% 
  fmt_currency(
    columns = vars(currency),
    currency =  "JPY"
  )

tab_currency

Rplot07.png

coconut 1円、durian6万円という意味のわからない状況になってますが、(動画では英ポンドdate_style = "GBP"で指定していました。)
小数点以下が四捨五入され、3桁ごとにカンマが打たれています。

5. 注釈の追加

表への注釈もできます。tab_footnote =でcell単位あるいはcolumn, row単位で注釈をつけることができます。注釈をつける条件も指定できるのでかなり便利。

footnote.R

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

Rplot09.png

6. NAの変更

このデータではNA(欠損値が)含まれています。これを別の文字に置き換えたい場合、fmt_missing()が有効です。例えば、missing_text = "-"とすることで、NAをハイフンに置換できます。

NA.R
tab_NA <- tab_footnote %>% 
  fmt_missing(columns = everything(),
              missing_text = "-")

tab_NA

image.png

columns = everything()を指定することで全カラムについてのNAをハイフンに変えています。

7. タイトルの作製

かなりいい感じになってきたのでタイトルを付けましょう。タイトルはtab_header()で加えることができます。しかも、md()関数を用いてでmarkdown形式で書くことにより斜体太字にも対応しています!

Title.R

tab_Title <- tab_NA %>% 
  tab_header(
    title = "Table",
    subtitle = md("きれいな*Table*は**gt パッケージ**で決まり!")
  )

tab_Title

Rplot11.png

8. pdfで保存

完成したらgtsave()で保存! png, htmlおよびpdf(Latexが必要)での出力が可能です。

saving.R
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

113
118
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
113
118