我有下表
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 年调查第二季度的示例一样。
我想找到一个视觉上可接受的解决方案来适应这种变化。理想情况下,我会找到一种方法:
2021/
2022
我尝试使用 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]]))
}))
您可以通过使用
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")))