gt 表内的条件包装

问题描述 投票:0回答:1

我有下表

surveys

structure(list(QUEST = c("Q1", "Q1", "Q1", "Q2", "Q2", "Q2", 
"Q3", "Q3", "Q3"), VALUE = c("REF_YEAR", "year_submitted", "Month_submitted", 
"REF_YEAR", "year_submitted", "Month_submitted", "REF_YEAR", 
"year_submitted", "Month_submitted"), `2018` = c("2017", "2018", 
"Feb", "2016", "2018", "Feb", "2017", "2018", "Mar"), `2019` = c("2018", 
"2019", "Apr", "2017", "2019", "Feb", "2018", "2019", "Apr"), 
    `2020` = c("2019", "2020", "Apr", "2018", "2020", "Feb", 
    "2019", "2020", "Apr"), `2021` = c("2020", "2021", "Feb", 
    "2019", "2021", "Feb", "2020", "2021", "Feb"), `2022` = c("2021", 
    "2022", "Apr", "2020", "2022", "Mar", "2021", "2022", "Apr"
    ), `2023` = c("2022", "2023", "Apr", "2021/2022", "2023/2023", 
    "Dec/Dec", "2022", "2023", "Mar"), `2024` = c("2023", "2024", 
    "Apr", NA, NA, NA, "2023", "2024", "Apr")), row.names = c(NA, 
-9L), class = "data.frame")

它给出了一个表格,其中列有调查轮次年份,对于每个调查问卷(Q1、Q2、Q3),提供了调查问卷中提交数据的参考年份,以及提交数据的年份和月份。例如,对于 2021 年的调查,第一季度可能已于 2023 年 6 月提交(即很晚),数据参考年为 2019 年(即与调查年度相比滞后两年)。 有时,受访者会发送与不同参考年份相对应的额外调查问卷。在这种情况下,值之间用“/”分隔,如 2023 年调查第二季度的示例一样。

我想找到一个视觉上可接受的解决方案来适应这种变化。理想情况下,我会找到一种方法:

  1. 检测单元格何时包含“/”
  2. 每年或每月有一行:例如:
2021/
2022
  1. 仅当单元格具有多个“值”时才减小字体大小

我尝试使用 gt table 但没有取得太大成功。我认为我应该找到一种方法来集成某种基于单元格内容的条件格式,但我一直在努力找出它只是为了减小字体大小,甚至没有提到强制显示在两行上。以下是我正在尝试从这篇文章中获得的代码https://stackoverflow.com/questions/76435371/styling-cells-in-a-gt-table-based-on-detection-of-a -他们的内容中的字符串但即使这样也不起作用。

surveys_tb <- surveys %>%
  gt(groupname_col = 'QUEST') %>%
  cols_label(VALUE = "") %>%
  tab_spanner(label = md("**Survey round**"), columns = starts_with("20")) %>%
  tab_style(cell_text(size=3),
            locations = names(surveys)[grep('20', names(surveys))] %>%
              lapply(FUN = \(col_name){
                cells_body(columns = col_name,
                           rows = grepl('/', surveys[[col_name]]))
                }))
r string conditional-formatting gt
1个回答
0
投票

您可以通过使用

tab_style_body()
来格式化文本,并使用
text_transform()
来替换斜杠来实现这一点(您也可以在转换为 gt 表之前在管道中更早地执行此部分)。

library(gt)

surveys |>
  gt(groupname_col = 'QUEST') |>
  cols_label(VALUE = "") |>
  tab_spanner(label = md("**Survey round**"), columns = starts_with("20")) |>
  tab_style_body(style = cell_text(size = "small"),
                 columns = -c(QUEST, VALUE),
                 rows =  everything(),
                 pattern = "/") |>
  text_transform(fn = \(x) sub("/", "<br>", x),
                 locations = cells_body(columns = starts_with("20")))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.