如何让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
相关产品推荐
相关产品推荐

