首页 > 解决方案 > kableExtra::pack_rows() - 分组不适用于长表中的最后一行,并且包装文本没有缩进

问题描述

我使用该kableExtra包在编织成 PDF 的 R markdown 文档中生成一个长表。

kableExtra::pack_rows()表的行集使用(以前kableExtra::group_rows())组合在一起

出现两个问题:

  1. 如果最后一行形成一个集合,则不显示它的分组,如果一个

    • 设置longtable = TRUE为允许长表跨越多个页面

      同时_

    • 用于kable_styling(..., latex_options = c("repeat_header"))在每一页上重复表格的标题。

  2. 我的第一列的某些行中的文本对于列宽来说太长(需要修复)。因此它被包装到下一行。但是,任何换行的文本都不再缩进。增加列宽使得文本在我的用例中不是一个选项。

我尝试了这篇 SO 帖子中提出的 minipage 解决方案来解决问题 2)。如果通过column_spec(1, width = "XXXem")) 将第一列设置得足够宽,它就可以工作。但是,在我的用例中,我无法将其设置得如此之宽以使其以这种方式工作。

如果没有其他可以缩进换行的内容,是否可以替代地删除缩进?

下面提供了 MWE 和插图。

要么longtable = FALSE没有latex_options = c("repeat_header"))==> Pack-rows 正在工作

Longtable-FALSE_Pack-rows-WORKING

longtable = TRUEAND latex_options = c("repeat_header"))==> Pack-rows 不工作

Longtable-TRUE_Pack-rows-不工作

---
title: "MWE"
output:
  pdf_document: default
  html_document: default
---
```{r echo=FALSE}
library(knitr)
library(kableExtra)

dt <- mtcars[1:3, 1:2]

kable(dt, 
  escape = FALSE, # to be able to include latex commands
  booktabs = T, 
  longtable = TRUE, # allow long table to span multiple pages
  ) %>% 
  kable_styling(full_width = F,
                latex_options = c(
                  "repeat_header"  # repeat header of long table
                )
  ) %>% 
  # column characteristics: set widths
  column_spec(1, width = "2cm") %>%
  # group rows together and give these groups labels
  pack_rows("Mazda Cars", 1, 2) %>%
  pack_rows("Datsun Cars", 3, 3)
```

标签: rr-markdownkablekableextra

解决方案


我没有足够的声誉来发表评论,所以即使它只是对您问题第二部分的部分回答,我也必须将其作为答案。有一种方法可以使用 indent=FALSE 删除 pack_rows() 函数中的所有缩进:

kable(dt, 
  escape = FALSE, # to be able to include latex commands
  booktabs = T, 
  longtable = TRUE, # allow long table to span multiple pages
  ) %>% 
  kable_styling(full_width = F,
                latex_options = c(
                  "repeat_header"  # repeat header of long table
                )
  ) %>% 
  # column characteristics: set widths
  column_spec(1, width = "2cm") %>%
  # group rows together and give these groups labels
  pack_rows("Mazda Cars", 1, 2, indent=FALSE) %>%
  pack_rows("Datsun Cars", 3, 3, indent=FALSE)

不幸的是,我的表格很长,如果我能找到一种方法来缩进我的长行名称的两个部分,它的可读性会更高。所以我仍然希望这个问题有更好的答案。但我希望这对某人有帮助!


推荐阅读