如果一个单元格(多列)的内容是使用 gt 包的特定字符串,则设置背景颜色

Set background color if one cell's (of multiple columns) content is specific string using gt package

使用下面的代码(来自),我们可以使用gt package:

根据字符串内容为多列单元格设置背景颜色
library(gt)
library(tidyverse)

id <- c(1,2,3,4,5)
res1 <- c("true", "true", "false", "true", "false")
res2 <- c("false", NA, NA, "true", "true")
df <- data.frame(id, res1, res2)

df %>% 
  gt() %>% 
  data_color(
    columns = c("res1", "res2"),
    colors = c("green", "red"),
    apply_to = "fill",
    autocolor_text = FALSE)

输出:

现在假设只有当 res1res2 列的内容为 true 时,我才需要 设置红色背景颜色,如果其他值如falseNA,保持原样即可,这意味着我希望突出显示这两列的true单元格。我怎么能那样做?谢谢。

参考文献:

https://gt.rstudio.com/reference/tab_style.html

使用 gt::tab_style 你可以:

library(gt)
library(magrittr)

df %>% 
  gt() %>% 
  tab_style(
    style = list(
      cell_fill(color = "red")
    ),
    locations = cells_body(
      columns = c(res1, res2),
      rows = res1 == "true" & res2 == "true"
    )
  )

EDIT 如果有多个列,您基本上可以像这样创建条件。基本思想是首先创建一个字符串,其中包含目标行的条件,并使用 !!rlang::parse_exprgt::cell_body:

中评估该字符串

注意:我在您的 df 中又添加了两列以使示例更加真实。

library(gt)
library(magrittr)

df <- data.frame(id, res1, res2, res3 = res1, res4 = res2)


cols <- paste0("res", 1:4)
conditions <- lapply(cols, function(x) "true")
names(conditions) <- cols 

rows <- paste(glue::glue("{.col} == '{.value}'", .col = names(conditions), .value = conditions), collapse = " & ")

df %>%
  gt() %>%
  tab_style(
    style = list(
      cell_fill(color = "red")
    ),
    locations = cells_body(
      columns = all_of(cols),
      rows = !!rlang::parse_expr(rows)
    )
  )