10.2 kableExtra パッケージ

kableExtra package (Zhu 2021)knitr::kable() (10.1節参照) を使用して作成した表の基本機能を拡張するために設計されました. knitr::kable() はシンプルな設計なので (これは Yihui が怠け者であるという意味にとるのはご随意に!), 他のパッケージで見られるような機能の多くが決定的に失われてしまっています. そして kableExtra はこのギャップを完全に埋めてくれます. kableExtra について最も驚異することは, 表のほとんどの機能, 例えば, 図10.1のようなストライプ背景の表をつくるなどが HTML でも PDF でも動作することです.

このパッケージはいつものように CRAN からインストールできますし, GitHub (https://github.com/haozhu233/kableExtra) から開発版をインストールすることもできます.

# install from CRAN
install.packages("kableExtra")

# install the development version
remotes::install_github("haozhu233/kableExtra")

発展的なドキュメントが https://haozhu233.github.io/kableExtra/ にあり, kable() の出力を HTML や LaTeX 出力でどうカスタマイズするかについて多くの使用例が掲載されています. 我々としてはご自分でドキュメントを読むことをおすすめし, ここでは一部の例だけを提示します.

kableExtra パッケージはパイプ演算子 %>% を前面に出しています. kable() の出力に kableExtra のスタイル関数を接続することができます. 例えばこのように.

library(knitr)
library(kableExtra)
kable(iris) %>%
  kable_styling(latex_options = "striped")

10.2.1 フォントサイズを設定する

kableExtra パッケージの kable_styling() 関数によってテーブル全体のスタイルを設定できます. 例えばページ上での表のアラインメント, 幅, フォントサイズなどです. 以下は小さいフォントサイズを使う例です.

kable(head(iris, 5), booktabs = TRUE) %>%
  kable_styling(font_size = 8)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa

10.2.2 特定の行・列のスタイルを設定する

関数 row_spec()column_spec() はそれぞれ個別の行と列のスタイル設定に使うことができます. 以下の例では第1行をボールドイタリックにし, 第2, 第3行を黒色背景と白色文字にし, 第4行にアンダーラインを引きタイプフェースを変更し, 第5行を回転させ, そして第5列に打ち消し線を引きます.

kable(head(iris, 5), align = 'c', booktabs = TRUE) %>%
  row_spec(1, bold = TRUE, italic = TRUE) %>% 
  row_spec(2:3, color = 'white', background = 'black') %>%
  row_spec(4, underline = TRUE, monospace = TRUE) %>% 
  row_spec(5, angle = 45) %>% 
  column_spec(5, strikeout = TRUE)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa

同様に, cell_spec() 関数で個別のセルにスタイル設定できます.

10.2.3 行・列をグループ化する

行や列をそれぞれ, pack_rows()add_header_above() 関数でまとめることができます. collapse_rows() 関数で行を崩し, セルを複数行にまたがらせることができます. 以下は行をグループ化したカスタムテーブルヘッダの例です.

iris2 <- iris[1:5, c(1, 3, 2, 4, 5)]
names(iris2) <- gsub('[.].+', '', names(iris2))
kable(iris2, booktabs = TRUE) %>%
  add_header_above(c("長さ" = 2, "幅" = 2, " " = 1)) %>% 
  add_header_above(c("Measurements" = 4, "More attributes" = 1))
Measurements
More attributes
長さ
Sepal Petal Sepal Petal Species
5.1 1.4 3.5 0.2 setosa
4.9 1.4 3.0 0.2 setosa
4.7 1.3 3.2 0.2 setosa
4.6 1.5 3.1 0.2 setosa
5.0 1.4 3.6 0.2 setosa

add_header_above() 内の名前付きベクトルに対して, 名前がテーブルヘッダにテキストとして表示され, 整数値のベクトルが対応する名前の列の数を表します. 例えば "Length" = 2Length が2列にまたがることを意味します.

以下は pack_rows() の例です. index 引数の意味は既に説明した add_header_above() の引数と似ています.

iris3 <- iris[c(1:2, 51:54, 101:103), ]
kable(iris3[, 1:4], booktabs = TRUE) %>% pack_rows(
  index = c("setosa" = 2, "versicolor" = 4, "virginica" = 3)
)
Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
versicolor
51 7.0 3.2 4.7 1.4
52 6.4 3.2 4.5 1.5
53 6.9 3.1 4.9 1.5
54 5.5 2.3 4.0 1.3
virginica
101 6.3 3.3 6.0 2.5
102 5.8 2.7 5.1 1.9
103 7.1 3.0 5.9 2.1

10.2.4 LaTeX で表を縮小する

HTML や LaTeX 出力特有の機能もいくつかあります. 例えば横向きページは LaTeX でのみ意味をなすので, kableExtralandscape() 関数は LaTeX でのみ機能します. 以下はページに合わせて表を縮小する例です. 縮小しなければ横に長すぎる表になります.

tab <- kable(tail(mtcars, 5), booktabs = TRUE)
tab  # 長すぎる元の表
mpg cyl disp hp drat wt qsec vs am gear carb
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
tab %>%
  kable_styling(latex_options = "scale_down")
mpg cyl disp hp drat wt qsec vs am gear carb
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2

HTML 版をご覧なら, 上の2つの表に違いが見られないでしょう.

参考文献

Zhu, Hao. 2021. kableExtra: Construct Complex Table with Kable and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.