如果一个单元格(多列)的内容是使用 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)
输出:
现在假设只有当 res1
和 res2
列的内容为 true
时,我才需要 设置红色背景颜色,如果其他值如false
或NA
,保持原样即可,这意味着我希望突出显示这两列的true
单元格。我怎么能那样做?谢谢。
参考文献:
使用 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_expr
在 gt::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)
)
)
使用下面的代码(来自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)
输出:
现在假设只有当 res1
和 res2
列的内容为 true
时,我才需要 设置红色背景颜色,如果其他值如false
或NA
,保持原样即可,这意味着我希望突出显示这两列的true
单元格。我怎么能那样做?谢谢。
参考文献:
使用 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_expr
在 gt::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)
)
)