R logo

作表で使われるのは、{knitr}パッケージのkable()(=kbl())と{kableExra}パッケージの組み合わせや、{gt}パッケージ等。

臨床論文の最初に出てくる「Table1」を作るときにはtableone()も便利。

 

今回は、{knitr}パッケージのkable()(=kbl())と{kableExra}パッケージの組み合わせについての備忘録。

kbl()で作表

kbl()は、下記のような内容。

kable(x, format, digits = getOption("digits"), row.names = NA, col.names = NA, align, caption = NULL, label = NULL, format.args = list(), escape = TRUE, ...)

kbl()の例

例えば、下記のようなデータフレームを作る。

# データフレームを作る
df <- data.frame("Pre1"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)),
"Pre2"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)),
"p1h_1"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)),
"p1h_2"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)),
"p6h_1"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)),
"p6h_2"=c(paste0("Cont", 1:2), paste0("Drug", 1:2)))

# 行名をつける
rownames(df) <- c(paste0("Cont", 1:2), paste0("Drug", 1:2))

これを表にするには、kbl(データ)で。

kbl(df)
output
        Pre1    Pre2    p1h_1   p1h_2   p6h_1   p6h_2
Cont1   Cont_1  Cont_1  Cont_1  Cont_1  Cont_1  Cont_1
Cont2   Cont_2  Cont_2  Cont_2  Cont_2  Cont_2  Cont_2
Drug1   Drug_1  Drug_1  Drug_1  Drug_1  Drug_1  Drug_1
Drug2   Drug_2  Drug_2  Drug_2  Drug_2  Drug_2  Drug_2

オプション色々

format

出力形式を選ぶ。

executionのみのときは問題ないが、R Markdownでknitするとき、formatを指定しておかないとエラーがでる場合がある。

align

  • 左揃え:"l"
  • 中央揃え:"c"
  • 右揃え:"r"

例えば、中央揃えにしたいときは、

# 中央揃え
kbl(df, format = "html", align = "c")

例えば、行名のみ左揃え、あとは中央揃えにしたいときは、

# 左、中央、中央、中央
kbl(df, format = "html", align = "lccc")

キャプションをつける

キャプションはcaption = で。

# 中央揃えにしてキャプションをつける
kbl(df, format = "html", align = "c", caption = "Drug treatment")
output
Drug treatment
Pre1 Pre2 p1h_1 p1h_2 p6h_1 p6h_2
Cont1 Cont1 Cont1 Cont1 Cont1 Cont1 Cont1
Cont2 Cont2 Cont2 Cont2 Cont2 Cont2 Cont2
Drug1 Drug1 Drug1 Drug1 Drug1 Drug1 Drug1
Drug2 Drug2 Drug2 Drug2 Drug2 Drug2 Drug2

kableExtraパッケージ

表のデザインをアレンジするには、{kableExtra}パッケージを使う。

# CRANからインストール
install.packages("kableExtra")

# 読み込み
library(kableExra)

スタイルの設定

kable_styling()で、表中のスタイルを設定できる。

例えばフォントサイズを変える場合はfont_size =で設定。

kbl(df) %>%
kable_styling(font_size = 8)

表全体を、画面いっぱいにする場合はfull_width = T, 表の中身に合わせる場合はfull_width = F

kbl(df, align = "c", caption = "Drug treatment") %>%
kable_styling(font_size = 10, full_width = F)
output
kableExtra-0

行、列、セルのスタイルいろいろ

row_spec()column_spec()cell_spec()で、それぞれ個別の行、列、セルのスタイル設定を行う。

例えば、第1行をボールドイタリックにして回転させ、第2と第3行を黒色背景と白色文字にし、第4行にアンダーラインを引きタイプフェースを変更し、第5列に打ち消し線を引く場合。

kbl(df, align = "c", caption = "Drug treatment") %>%
kable_styling(font_size = 10, full_width = F) %>%
row_spec(1, bold = TRUE, italic = TRUE) %>%
row_spec(1, angle = 45) %>%
row_spec(2:3, color = 'white', background = 'black') %>%
row_spec(4, underline = TRUE, monospace = TRUE) %>%
column_spec(5, strikeout = TRUE)
output
kableExtra-1

行・列をグループ化する

行や列を、それぞれpack_rows()add_header_above()でまとめることができる。

また、collapse_rows()で行を崩し、セルを複数行にまたがらせることができる。

例えば、行を2列ずつ”Cont"と”Drug”にまとめ、列を2列ずつ"treat1","treat2","treat3"にまとめる場合。

kbl(df, align = "c", caption = "Drug treatment") %>%
kable_styling(font_size = 10, full_width = F) %>%
pack_rows(index = c("Cont" = 2, "Drug" = 2)) %>%
add_header_above(c(" " = 1,"treat1" = 2,"treat2" = 2,"treat3" = 2))
output
kableExtra-2

References

にほんブログ村 子育てブログ ワーキングマザー育児へ