【问题标题】:kableExtra::pack_rows() - grouping not working for last row in long table and no indentation for wrapped textkableExtra::pack_rows() - 分组不适用于长表中的最后一行,并且包装文本没有缩进
【发布时间】:2020-10-08 18:44:14
【问题描述】:

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

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

出现两个问题:

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

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

      同时

    • 使用kable_styling(..., latex_options = c("repeat_header"))在每一页重复表头。

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

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

如果没有其他方法可以缩进换行的内容,是否可以将缩进去掉?

下面提供了 MWE 和插图。

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

longtable = TRUE AND latex_options = c("repeat_header")) ==> 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)
```

【问题讨论】:

  • 仅供参考:对于部分问题,其他用户已在GitHub 提交了问题
  • 根据kableExtra 包的作者的说法,该错误发生在“当您使用带有repeat_header 的group_rows 作为repeat_header 时,会在最后一行添加一个*。”和has been fixed recently

标签: r r-markdown kable kableextra


【解决方案1】:

我没有足够的声誉来发表评论,所以即使它只是对您问题第二部分的部分回答,我也必须将其作为答案。有一种方法可以使用 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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多