kableExtra:为动态列长度调整列标签的长度

kableExtra: Adjust length of column label for dynamic column lengths

我正在使用 R Markdown 创建 PDF 文件,其中包含摘要 table 以及动态 changing/unknown 数量的每月列。我希望“Month Actuals”标签动态调整以显示在报告 运行.

时出现的所有月份列上方

我创建了一个 month_count object:

library(tidyverse)
month_count <-
  data %>% 
  summarize(month_count = n_distinct(year_month)) %>% 
  as_vector()

并在add_header_above函数中使用:

summary %>%
  kbl("latex", 
      booktabs = TRUE) %>%
  kable_styling(position = "left",
                latex_options = c("HOLD_position",
                                  "scale_down",
                                  "striped")) %>% 
  column_spec(column = 1, width = "2in") %>% 
  column_spec(column = 2:99, width = ".75in") %>% 
  add_header_above(c(" ", "Year-to-Date" = 4, "Month-to-Date" = 3, "Monthly Actuals" = month_code))

这有效,但是,输出上的标签显示为“每月 Actuals.month_count”。关于如何 1) 改进此标签或 2) 设置动态调整 header 标签有什么想法吗?

下面是正在播放的数据,如果这对解决标签问题有用的话:

data 
 year_month
  <chr>     
2021_07   
2021_08   
2021_09   
2021_10
2021_11   
2021_12   
2022_01   
2022_02

summary
` Area    `Yearly Target` `YTD Total` `Percent of Yearly T~` Balance `Monthly Target` `Current Month~` `Percent of Mo~` `2021 07` `2021 08`
   <chr>             <dbl>       <dbl>                  <dbl>   <dbl>            <dbl>            <dbl>            <dbl>     <dbl>     <dbl>
Area 1              416           0                    0      -416               35                0              0           0         0
Area 2              520          69                   13.3    -451               44                9             20.4        12        11
Area 3              624           0                    0      -624               52                0              0           0         0
 Area 4               50          45                   90        -5                5                7            140           5         3
Area 5                0        6713                    0         0                0              959              0           0      1097
Area 6                0         240                    0         0                0               30              0          21        42
Area 7              125           6                    4.8    -119               11                2             18.2         1         2
Area 8              120          18                   15      -102               10                5             50           0         0
Area 9             3900        1127                   28.9   -2773              325              141             43.4        71        96
Area 10              54           0                    0       -54                5                0              0           0         0
Area 11               0         118                    0         0                0               15              0          50        35

您的 month_count 是一个已命名的整数,该名称以 header 结尾。

> str(month_count)
 Named int 8
 - attr(*, "names")= chr "month_count"

关于如何解决这个问题的两个例子

  • 删除名称属性,names(month_count) <- NULL并保持其他一切不变
  • 根本不要使用 month_count 而是依赖 ncol(summary)add_header_above(c(" ", "Year-to-Date" = 4, "Month-to-Date" = 3, "Monthly Actuals" = ncol(summary)-8))

使用其中任何一个,header 中的附加文本将被删除:

......