R kable/kableExtra,按百分比条件格式化(带有缺失值)

Meg*_*n C 5 r conditional-formatting percentage kableextra kable

我正在使用 kable 和 kableExtra 并希望显示一个包含百分比列的表格(格式为“95%”)。我还想根据百分比值(具有多种颜色和切点)对单元格背景进行条件格式设置。另外,还混杂了一些NA。

我已经尝试了这篇文章中的一些方法,但不喜欢 cell_spec 背景着色不会对整个单元格进行着色,因此更愿意在 kable 中使用 column_spec 。然而,我发现的所有显示百分比的选项都将百分比转换为字符变量,这限制了我执行条件格式的能力。

当我简化示例代码以发布到此处时(经过几个小时的错误),我终于使用 startWith 使其工作(在本例中这是一个不错的解决方案,因为我的切点位于 80% 和 90%,但对于所有情况)。

df <- tibble(
          x=c(1:6),
          percents =c (1, .95, .82, .77, .62, NA)
          )
    
df$percents <- percent(df$percents, accuracy = 1)

kable(df, booktabs=TRUE, escape=FALSE ) %>% 
   kable_styling() %>% 
  column_spec(2, background = if_else(startsWith(df$percents, '100'), "Darkgrey", 
                              if_else(startsWith(df$percents, '9'), "Darkgrey", 
                              if_else(startsWith(df$percents, '8'), "silver", "lightgray", 
                              "white"), "white"), "white"))
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有人有另一种解决方案来保留将百分比值作为数字而不是字符来使用的能力。

谢谢你!

akr*_*run 5

我们可以使用它将formattable::percent保持type完整

df$percents = formattable::percent(df$percents, digits = 0) 
kable(df, booktabs=TRUE, escape=FALSE ) %>% 
   kable_styling() %>% 
   column_spec(2, background = case_when(df$percents > 0.9 ~ 'darkgrey', 
                                    df$percents > 0.8 ~ 'silver', 
                                    is.na(df$percents) ~ 'white', 
                                    TRUE ~ 'lightgray'))
Run Code Online (Sandbox Code Playgroud)

数据

df <- tibble::tibble(
  x=c(1:6),
   percents =c (1, .95, .82, .77, .62, NA)
   )   
Run Code Online (Sandbox Code Playgroud)