使用 DT 包基于列值的条件格式两列

Conditional format two columns based on column values using DT package

例如使用 mtcars 数据集

library(tidyverse)
library(DT)

dat <- mtcars

我想根据其中的值为 table 的 dat$disp 列的背景着色。即,如果该值低于 150,则为绿色,如果该值介于 150 和 250 之间,则为橙色,如果高于 250,则为红色。

我尝试通过以下方式使用另一个答案的帮助:

dat <- mtcars
dat$colors <- with(dat, ifelse(disp<=150, "green", ifelse(disp>=250, "yellow"), "red"))

datatable(dat, 
          options = list(
            columnDefs = list(
              list(visible = FALSE, targets = 12)
            )
          )
) %>% formatStyle("disp", valueColumns = "colors", backgroundColor = JS("value"))

但我认为我把它弄得太复杂了,这会使单元格变成红色和黄色,并且不符合我想要的条件格式。

我还想对 'car name' 列使用相同的颜色,以便它们与 disp 列匹配。

我不太习惯 R,非常感谢任何关于这个和 DT 包的指导,我相信这比我想象的要简单得多。

谢谢!

这是否解决了您的问题?

dat <- dat %>%
  rownames_to_column(var = "car_name") %>%
  as_tibble() %>%
  mutate(colors = case_when(disp <= 150 ~ "green",
                            disp >= 250 ~ "yellow",
                            TRUE ~ "red"))

datatable(dat,
          options = list(columnDefs = list(list(
            visible = FALSE, targets = 12
          )))) %>% formatStyle(
            c("disp", "car_name"),
            valueColumns = "colors",
            backgroundColor = JS("value")
          )

这可能会有用。 colors 列不是必需的。 注意颜色:正如您所注意到的,如果该值是 低于 150 色绿色, 如果它介于 150 和 250 之间,颜色为橙色, 及以上 250 色红色。

dat <- dat %>% rownames_to_column(var = "car_name")
datatable(dat) %>% 
  formatStyle(
    c("disp", "car_name"),
    valueColumns = "disp",
    backgroundColor  = styleInterval(c(150, 250), c('green','orange', 'red'))
  )