gtパッケージについて

Rにgtというパッケージがあります。これは,お手軽に表を作るためのパッケージです。使い方については以下の記事を見ると良いです。

ここでは私の自分のための備忘録を残しています。

データの整形

irisデータで実験してみる。表の表示に適するように前段階としてデータを整形する。

library(gt)
library(tidyverse)
  
dat <- tibble(iris) %>%
  group_by(Species) %>%
  summarise(across(Sepal.Length:Petal.Width,mean)) %>%
  pivot_longer(col=-Species, names_to=c("S/P","L/W"), names_sep="\\.") %>%
  pivot_wider(names_from = "L/W")

整形したデータ

gt関数

とりあえずこのままで,gt関数に突っ込んでみるとそれらしい表を出力してみす。

dat %>% gt()

そのままgt

グループに分けて表示するには,groupname_colの引数にグループ分けしたい列名を入れます。

ab1 <- gt(dat,
           groupname_col = "Species",
           rowname_col = "S/P") 
tab1

グループ分け

表示する桁数が多いので減らしてみましょう。先ほど作ったものに桁数の設定を行う関数をたします。ここら辺の感覚はggplot的です。

tab2 <- tab1 %>%
  fmt_number(
    columns = vars("Length", "Width"),
    decimals = 2)
tab2

桁数減らした

今度はタイトルを足してみます。タイトルを設定する関数をパイプでつなぎます。ついでスタブ列の列名も足すことにします。

tab3 <- tab2 %>%
  tab_header(
    title = "ここにタイトルが入るよ",
  ) %>%
  tab_stubhead("S/P") %>%
  tab_style(
    style=cell_text(align="left"),
    locations = cells_title("title"))
tab3 

タイトルつけた

ついでに注もつけてみます。

tab4 <- tab3 %>% tab_footnote(
    footnote="Sepalはがく片の意味で,Petalは花びらの意味だよ",
    location= cells_stubhead()
    )
tab4

タイトルつけた

APAっぽい雰囲気を出す

ここまでで,表に必要な要素は大体整ったのですけれど,このままだと論文に投稿するような形になっていません。そこで以下のサイトを参考にしながらさらに細かい設定をしてAPA風の表のデザインにしてみます。

tab5 <- tab4 %>%
  tab_options(
    table.border.top.width = 0, #タイトルの上の線を消す,
    table.border.bottom.width = 0, #注の下の線を消す
    heading.title.font.size = px(16), #タイトルのフォントサイズをいい感じに
    row_group.border.bottom.width = 0, #セクション名の下の線を消す
    table_body.hlines.width = 0, # tableの中の水平線消す
    stub.border.width = 0, # stub列の中の線を消す
    column_labels.border.top.width = 3, # 変数名の行の線を黒く太く
    column_labels.border.top.color = "black", 
    column_labels.border.bottom.width = 3,
    column_labels.border.bottom.color = "black",
    table_body.border.bottom.color = "black", #テーブルの下線を黒く
    table.width = pct(60), # 程よく幅を広げる(数字で調整)
    table.background.color = "white",
    row_group.border.top.color = "black", #セクション名の上の線を消す
    row_group.border.top.width = 1 #セクション名の上の線を細く
  ) %>% cols_align(align="center") %>% 
  tab_style(
    style=list(cell_text(align="center")),#列名を中央揃えに
    locations=cells_row_groups()
  )
tab5

セルとか,列とか,タイトルとかを指定して,それぞれのパーツを指定していく感じです。結構細かいところまでできます。完成品はこちら。

APA風に

毎回,こんな作業をやるのは面倒なので,自分のよく使うような表のデザインは関数化しておくと良いでしょう。

likeapa <- function(x){tab_options(x,
  table.border.top.width = 0, #タイトルの上の線を消す,
  table.border.bottom.width = 0, #注の下の線を消す
  heading.title.font.size = px(16), #タイトルのフォントサイズをいい感じに
  row_group.border.bottom.width = 0, #セクション名の下の線を消す
  table_body.hlines.width = 0, # tableの中の水平線消す
  stub.border.width = 0, # stub列の中の線を消す
  column_labels.border.top.width = 3, # 変数名の行の線を黒く太く
  column_labels.border.top.color = "black", 
  column_labels.border.bottom.width = 3,
  column_labels.border.bottom.color = "black",
  table_body.border.bottom.color = "black", #テーブルの下線を黒く
  table.width = pct(30), # 程よく幅を広げる(数字で調整)
  table.background.color = "white",
  row_group.border.top.color = "black", #セクション名の上の線を消す
  row_group.border.top.width = 1 #セクション名の上の線を細く
) %>% cols_align(align="center") %>%  # スタブ以外の列名を中央揃えに
  tab_style(
    style=list(cell_text(align="center")), # グループ変数名を中央揃えに
    locations=cells_row_groups()
  )}

tab4 %>% likeapa

最後は図に保存しておしまいです。gtsave関数を使います。

gtsave(tab5, "likeapa.pdf")