簡體   English   中英

R kable/kableExtra,按百分比的條件格式(有缺失值)

[英]R kable/kableExtra, conditional formatting by percentage (with missing values)

我正在使用 kable 和 kableExtra 並希望顯示一個包含百分比列的表格(格式為“95%”)。 我還想根據百分比值(使用多個 colors 和切點)對單元格背景進行條件格式化。 此外,還混入了一些 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"))

我很好奇是否有人對此有另一種解決方案,可以保留將百分比值作為數字而不是字符使用的能力。

謝謝你!

為標簽創建一個單獨的列,並使用case_when與數字進行比較。

library(knitr)
library(kableExtra)

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

df$percent_label <- scales::percent(df$percents, accuracy = 1)

kable(df[-2], 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'))

在此處輸入圖像描述

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

數據

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM