R kableExtra 两个中心对齐:一个用于带换行符的列,另一个用于其他

R kableExtra two center alignments: one for columns with linebreaks and another for others

所需输出

使用 R kableExtra,我想在 PDF 和 HTML 输出中创建以下 table 格式(至少存在换行符、居中和 LaTeX 方程式),例如下列的。

代码尝试

以下 R 代码正确呈现所需的 PDF 输出:

#-------------------
library(tidyverse)
library(kableExtra)
#-------------------

fs_dt <- tibble(
  school = 1:4,
  nstudents = c(1471,890,1021,1587),
  nf_total = c(792,447,511,800),
  nf_intv = c(25,15,20,40),
  nsmokers = c(10,3,6,27)
)

fs_dt %>% 
 kbl(booktabs = T,
    col.names = linebreak(c("School",
                  "No. of students",
                  "No. of females\n($M_i$)",
                  "No. of females interviewed\n($m_i$)",
                  "$\sum_{i\in\mathcal{S}} y_{ij}$"),
                  align = "c"),
    escape = FALSE,
    align = "ccccc"
    ) %>% 
  kable_styling(latex_options = c("striped","hold_position"))

但是,HTML 输出如下所示,其中缺少第三和第四列名称。

问题

我们如何在不借助条件编码(例如,is_html_output()/is_latex_output())的情况下使用单个代码实现两种输出?

这里有个小问题

kableExtra 不适用于“HTML-mode”中的 \n

你会做什么?

  1. 编织到HTML时可以把\n改成<br>

  2. 不太方便,尤其是当你有很多表时(每次都将 \n 更改为 <br>

    对于这种情况,您可以使用 column_spec:

    #your code above
    escape = FALSE,
    align = "ccccc"
    ) %>% 
    column_spec(3, width = "3cm") %>%
    column_spec(4, width = "5.3cm") %>% #4.8 cm for PDF!!!
    kable_styling(latex_options = c("striped","hold_position"))
    

    你应该每次都确定你的宽度(有时是每次输出),这有点乏味。

    每个解决方案都有一些水下岩石,所以我们必须妥协:(