【问题标题】:Conditionally format a row in kableExtra有条件地格式化 ka​​bleExtra 中的一行
【发布时间】:2021-03-19 23:47:58
【问题描述】:

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

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

【问题讨论】:

    标签: r kable


    【解决方案1】:

    可以使用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')
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2012-03-09
      • 2020-09-09
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多