医学論文の患者さんのcharacteristicsをまとめたいわゆる「Table 1」を簡単に作成するためのパッケージ吉田和樹さんが作られている。多分便利なのでPython版も存在する。
finalfit
パッケージの方が最終的には解析も含めてできるのでお手軽そうだが、現状では
という大きな問題点もあり、これが解決されるまではこちらを利用することになりそう。
CreateTableOne()
CreateTableOne(
vars,
strata,
data,
factorVars,
includeNA = FALSE,
test = TRUE,
testApprox = chisq.test,
argsApprox = list(correct = TRUE),
testExact = fisher.test,
argsExact = list(workspace = 2 * 10^5),
testNormal = oneway.test,
argsNormal = list(var.equal = TRUE),
testNonNormal = kruskal.test,
argsNonNormal = list(NULL),
smd = TRUE)
全体・層別の両方を統合した表を作成する
これがオプション一発とかでできるとありがたいのだが。alfredのsnipetにRtable1
で展開されるようにテンプレート登録済み
dplyr::select()
で選択、必要なら変数作成labelled::var_label()
で変数に出力用のラベルを設定nonnormalVars
:非正規分布する変数factorVars
:数値として入っているカテゴリカル変数のリストcramVars
:1行で表示したいカテゴリ変数のリストexactVars
:exact testで扱いたい変数のリストstratVar
:層別化したい変数tableone
オブジェクトを生成するprint
出力をオブジェクトに格納cbind
を用いてmatrixを結合knitr::kable()
とkableExtra::kable_as_image
で\[\LaTeX\]的な表をpng出力
# 全体および層別のtableoneオブジェクトを作成 total1 <- tableone::CreateTableOne(data = d1) strat1 <- tableone::CreateTableOne(data = d1, strat = stratVar)
# print出力をオブジェクトに格納 # https://github.com/kaz-yos/tableone/issues/10 total1.matrix <- print(total1, printToggle = FALSE, noSpaces = TRUE, varLabels = TRUE, explain = TRUE, nonnormal = nonnormalVars, cramVars = cramVars)
strat1.matrix <- print(strat1, printToggle = FALSE, noSpaces = TRUE, varLabels = TRUE, explain = TRUE, nonnormal = nonnormalVars, cramVars = cramVars, exact = exactVars)
# cbindでmatrixを結合 table1 <- cbind(total1.matrix, strat1.matrix) # readr::write_rds(table1, “data/table1.RDS”)
tableoneでlabelの使用
いちいち変数をrenameするのは大変。Ver 0.9.0でlabelled::var_label
によるラベルのサポートが開始。print
の中でvarLabels = TRUE
としてやれば良い。
Release Variable Label Support · kaz-yos/tableone
var_label
の使い方
もちろん一つずつ設定もできるが
var_label(iris$Sepal.Length) <- "Length of sepal"
まとめて設定することもできる。
var_label(iris) <- list(Petal.Length = "Length of petal",
Petal.Width = "Width of Petal")
行名の「(mean (sd))」を消すには
print
でexplain = FALSE
を指定すれば消すことができる。
kable
やkableExtra
を利用して表を\[\LaTeX\]→png出力する際のメモ
knitr::kable()
でformat =
"``latex``"
を指定して出力
row.names = FALSE
, align = c(``"``l``"``,
"``l``"``,
"``r``"``,
"``r``"``,
"``r``"``)
などは適宜設定booktabs = TRUE
にするのが大抵の場合綺麗に出力されるlinesep =
""
を追加するkableExtra::kable_as_image()
でpngファイルとして出力
kable_as_image(``"``table1``"``)
とすればtable1.png
として出力されるkeep_tex = TRUE
にして中間ファイルを確認するkable()
kable_as_image()
kable(x, format = "latex", row.names=FALSE, align=c("l", "l", "r", "r", "r"),
caption = "Table1 in LaTeX format", booktabs = T, linesep = "") %>%
kableExtra::kable_as_image(filename = NULL, file_format = "png",
latex_header_includes = NULL, keep_pdf = FALSE, density = 300,
keep_tex = FALSE)
実際の使用時にはこのくらいの記載で良い
table1 %>%
as.data.frame() %>%
kable("latex", row.names=FALSE, align=c("l", "l", "r", "r", "r"),
caption = "Table1 in LaTeX format", booktabs = T, linesep = "") %>%
kable_as_image("table1")
Create Awesome LaTeX Table with knitr::kable and kableExtra が実例を見ながら確認できる。
booktabs = T
としてbooktabs
スタイルを利用すると基本的には見栄えが良くなる。この時デフォルトのkable()
ではlinesep = if (booktabs) c('', '', '', '', '\\addlinespace') else '\\hline'
が設定されており、表の中の5行ごとに少し空白が入るようになっている(これはこれで見やすいが)。これをなくすためにはlinesep =
""
などとしてしまえば良い。
\[\LaTeX\]的なフォーマットがどうなっているか確認するためには、
kableExtra::kable_as_image(…, keep_tex = TRUE)
としてやれば中間ファイルの.tex
ファイルが残るのでそれを見て確認すれば良い。
escape = FALSE
にすると$$
を使って数式表現できる?
\[\LaTeX\]なので基本的には図表の番号は自動でついていくが、実際には手動で番号を変更したい場合がある(よくある)。