'R Table Conditional Format applied to cells within a row

I'm trying to apply conditional formatting based on data within a row. I've tried a number of libraries including DT, Reactablefmtr and formatter. The idea is to put it into shiny to present table of findings.

How do I make this function more dynamic to not call it for each row but reference it to the norm variable?

# the table
fin_ratios <- data.frame(
  descr = c("Ratio 1", "Ratio 2"),
  norm = c(10, 20),
  `2021` = c(11, 19),
  `2022` = c(9, 21)
)

The code to style the table:

library(formattable)

custom_color_tile <- function (x, x_norm = 10) {
formatter("span",
style = x ~ style(display = "block", 
padding = "0 4px", 
`color` = "white", 
`border-radius` = "4px", 
`background-color` = ifelse(x >= x_norm, "green", "red")))
}

fin_ratios %>% 
  formattable(
    list(
      area(col = 3:4, row = 1) ~ custom_color_tile(x_norm = 10),
      area(col = 3:4, row = 2) ~ custom_color_tile(x_norm = 20)
      )
    )
    


Solution 1:[1]

Your function is already working. Instead of using single values for x_norm, you can use the norm variable as a vector fin_ratios$norm.

formattable(fin_ratios,
            list(area(col = 3:4) ~ custom_color_tile(x_norm = fin_ratios$norm)))

enter image description here

You may just pay attention, if you want to color certain rows. Than you have to select the rows of the norm variable as well.

# color just first row
formattable(fin_ratios,
            list(area(col = 3:4,
                      row = 1) ~ custom_color_tile(x_norm = fin_ratios$norm[1])))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 tamtam