在 kableExtra 中有条件地格式化一行

Conditionally format a row in kableExtra

我使用 kableExtra 包在 R 中有以下 table。我想有条件地格式化 table 中的最后一行,如果值为正,我可以将单元格的背景颜色更改为绿色,如果值为负,则为红色。

library(kableExtra)
library(tidyverse)

data <- structure(list(Category = c("ICE BoA 0-3 Yr", "ICE BoA 1-5 Yr", 
"JP Morgan 1-10 Yr", "USD/ZAR"), `Global Financial Crisis` = c(0.32, 
0.26, 0.29, 0.08), `Taper Tantrum` = c(0.31, 0.43, 0.43, 0.14
), `Covid Crisis` = c(0.12, 0.57, 0.52, 0.29), `Entire Reference Period` = c(0.31, 
0.31, 0.22, -0.26)), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame"))

kable %>% kable(align = 'lcccc') %>% 
  kable_styling(font_size = 30) %>% 
  column_spec(1, bold = T) %>% 
  row_spec(0,  col = 'white', background = '#7c3042')

如果我要格式化列,在将我的数据框放入 kableExtra 之前,使用简单的 mutate 参数可以很简单地完成此操作。关于如何为特定行执行此操作的任何想法?

mutate(
  `Column Name` = cell_spec(`Column Name`, color = ifelse(`Column Name` > 0, "white", "white"),
                         background = ifelse(`Column Name` > 0, "green", "red")))

TIA

可以通过 cell_spec 并在创建 kable 时指定 escape=FALSE 来完成。

data=as.data.frame(data)

gr=ifelse(data[4,]>0, "green", "red")

for (c in 2:5) {
  data[4,c]=cell_spec(data[4, c], background=gr[c])
}

data %>% kable(align = 'lcccc', escape=FALSE) %>% 
  kable_styling(font_size = 10) %>% 
  column_spec(1, bold = T) %>% 
  row_spec(0,  col = 'white', background = '#7c3042')