You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让R语言gt包的条件样式作用于分组汇总行?

如何在gt包中将条件样式应用到分组汇总行?

我正在使用R语言的gt包生成表格,目前基础功能已实现,但希望将设置的条件样式(如Ytd Dif小于0时填充颜色)同时应用到分组汇总行。以下是我的示例代码,请问是否有实现方法?

data <- structure(list(Type = c("A", "A"), Region = c("Bbbb", "Cccc"), 
    `Ytd Supply` = c(11867.67, 1557.87), `Ytd Budget` = c(11364.25, 
    1352.97), `Ytd Dif` = c(-503.42, -204.9), `Ytg Supply` = c(8432.97, 
    10313.95), `Ytg Budget` = c(8945.33, 10777.04), `Ytg Dif` = c(-512.360000000001, 
    -463.089999999998)), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -2L), groups = structure(list(
    Type = "A", .rows = structure(list(1:2), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L), .drop = TRUE))

gt(data) %>%
  tab_header(
    title = "my tytle") %>%
  tab_spanner(
    label = "YTD",
    columns = contains("YTD")) %>%  
  tab_spanner(
    label = "YTG",
    columns = contains("YTG")) %>%
  summary_rows(
    groups = TRUE,
    columns = where(is.numeric),
    fns = list(
      Total = ~sum(., na.rm = TRUE))) %>%
  tab_style(
    style = list(
      cell_fill(color = "#F08080")),
    locations = cells_body(
      columns = `Ytd Dif`,
      rows =  `Ytd Dif` < 0))

要实现将条件样式同步应用到分组汇总行,你可以借助gt包的cells_summary()函数定位汇总行,再配合cells_filter()做条件筛选,补充对应的样式设置即可。

修改后的完整代码

data <- structure(list(Type = c("A", "A"), Region = c("Bbbb", "Cccc"), 
    `Ytd Supply` = c(11867.67, 1557.87), `Ytd Budget` = c(11364.25, 
    1352.97), `Ytd Dif` = c(-503.42, -204.9), `Ytg Supply` = c(8432.97, 
    10313.95), `Ytg Budget` = c(8945.33, 10777.04), `Ytg Dif` = c(-512.360000000001, 
    -463.089999999998)), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -2L), groups = structure(list(
    Type = "A", .rows = structure(list(1:2), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L), .drop = TRUE))

gt(data) %>%
  tab_header(title = "my tytle") %>%
  tab_spanner(label = "YTD", columns = contains("YTD")) %>%  
  tab_spanner(label = "YTG", columns = contains("YTG")) %>%
  summary_rows(
    groups = TRUE,
    columns = where(is.numeric),
    fns = list(Total = ~sum(., na.rm = TRUE))
  ) %>%
  # 为普通数据行应用条件样式
  tab_style(
    style = list(cell_fill(color = "#F08080")),
    locations = cells_body(
      columns = `Ytd Dif`,
      rows = `Ytd Dif` < 0
    )
  ) %>%
  # 为分组汇总行应用条件样式
  tab_style(
    style = list(cell_fill(color = "#F08080")),
    locations = cells_summary(
      columns = `Ytd Dif`,
      rows = summary_row_index()
    ) %>%
    cells_filter(`Ytd Dif` < 0)
  )

关键说明

  • cells_summary()用于定位所有分组汇总行,summary_row_index()可以匹配所有汇总行条目
  • cells_filter()用于对汇总行的列值做条件筛选,确保只有Ytd Dif小于0的汇总单元格才会被上色
  • 如果需要将样式同步应用到其他列(如Ytg Dif),只需修改columns参数和筛选条件即可

内容的提问来源于stack exchange,提问作者oprick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:35:16