首页 > 解决方案 > Kable:如何根据行中其他值的比例对值使用条件格式

问题描述

我想在kable/中使用条件格式kableExtra来根据行中的范围为值着色。我找到了很多关于如何按列中的值执行此操作的示例,但我正在努力按行执行此操作。

以下是按列值的示例:

require(tidyverse)
  require(knitr)
  require(kableExtra)
  iris[1:10, ] %>%
    mutate_if(is.numeric, function(x) {
      cell_spec(x, bold = T, 
                color = spec_color(x, end = 0.9),
                font_size = spec_font_size(x))
    }) %>%
    mutate(Species = cell_spec(
      Species, color = "white", bold = T,
      background = spec_color(1:10, end = 0.9, option = "A", direction = -1)
    )) %>%
    kable(escape = F, align = "c") %>%
    kable_styling(c("striped", "condensed"), full_width = F)

在此处输入图像描述

但是,我希望颜色由每行中的值范围确定。当然,在这个例子中,第一列总是最大的,最后一列是最小的,所以它们都会朝着那个方向前进,但是在我的实际数据中,最高和最低值的位置在每一行的不同列中。

标签: rknitrkablekableextra

解决方案


您可以apply按行使用值

df = head(iris,10)
fn = function(x) cell_spec(x, bold = T, color = spec_color(x, end = 0.9),
                          font_size = spec_font_size(x))    
df[, 1:4] = t(apply(df[,1:4], 1, fn))    
df %>%
  kable(escape = F, align = "c") %>%
  kable_styling(c("striped", "condensed"), full_width = F)

在此处输入图像描述


推荐阅读