【问题标题】:How do I top align two tables of different sizes to be side by side using knitr::kable()如何使用 knitr::kable() 将两个不同大小的表并排对齐
【发布时间】:2020-04-23 19:29:29
【问题描述】:

为了比较,我试图将两张桌子并排放置。我遇到的问题是,当我在 rmarkdown 中编织时,第二个表(更少的行)被放置在第一个表的中间,反之亦然,具体取决于每个表中有多少行。我希望它们都顶部对齐。我已经 valign、hold_position 和 HOLD_position 无济于事。

以下是使用 rmarkdown 和 mtcars 的完全可重现的问题示例

{r mtcars, echo = F, fig.pos = "H"}

cars1 <- 
  mtcars %>% 
  rownames_to_column(var = "car") %>% 
  select(car:disp) %>% 
  head(8)

cars2 <- 
  mtcars %>% 
  rownames_to_column(var = "car") %>% 
  select(car:disp) %>% 
  tail(4)


knitr::kable(
  list(
    cars1,
    cars2
  ),
valign = 't'
) %>% 
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                            latex_options = "hold_position")

mtcars table example

【问题讨论】:

    标签: r r-markdown kable kableextra


    【解决方案1】:

    说实话,我不知道如何使用 knitr 选项和参数来解决这个问题。

    但我建议您使用 flexdashboards 的轮廓解决方案,您可以在其中创建两个(或更多)列并将每个表绘制在自己的列中,从而得到下图并排的表和顶部对齐。但我不知道您的降价目的是否允许使用 flexdashboards。

    【讨论】:

    • 感谢柯克的回复。不幸的是,我正在尝试使用 xaringan 幻灯片将表格并排嵌入幻灯片放映中:(
    【解决方案2】:

    这个问题的答案是使用 Latex 手动调整较短图形的高度,使其与较高的图形对齐。

    首先为每个表分别制作kable表:

    cars1 <- 
      mtcars %>% 
      rownames_to_column(var = "car") %>% 
      select(car:disp) %>% 
      head(8) %>% 
      kbl(booktabs = T)
    
    cars2 <- 
      mtcars %>% 
      rownames_to_column(var = "car") %>% 
      select(car:disp) %>% 
      tail(4) %>% 
      kbl(booktabs = T)
    

    然后使用 Latex 代码将表格并排对齐:

    cat(c("\\begin{table}[!htb]
        \\begin{minipage}{.5\\linewidth}
        \\caption{The first table}",
            cars1,
        "\\end{minipage}%
        \\begin{minipage}{.5\\linewidth}
        \\caption{The second table}
        \\vspace*{-19mm}",
            cars2,
        "\\end{minipage} 
    \\end{table}"
    )) 
    

    这里的关键行是\\vspace*{-19mm},手动调整第二张桌子的高度。结果如下:

    【讨论】:

    • 当我将乳胶代码粘贴到 rmd 块中时,它只会返回乳胶。我将只粘贴前几行。还有什么我想念的吗? \begin{table}[!htb] ## \begin{minipage}{.5\linewidth} ## \caption{第一个表格}
    • 感谢您的提问。您可能需要在块头中添加 results='asis' 以获得结果。像这样:{r sample, results='asis'}
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 2017-05-12
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多