【问题标题】:How highlight specific cells in knitr and kable packages in R如何在 R 中突出显示 knitr 和 kable 包中的特定单元格
【发布时间】:2021-07-16 12:07:29
【问题描述】:

我有以下数据框:

library(knitr)
library(kableExtra)
library(dplyr)
df<- structure(list(date = c("2021-04-12", "2021-04-13", "2021-04-14","2021-04-15", "2021-04-16", "Avg", "Change", "Change (%)"), 
               Audi = c(3.3, 3.7, 6.6, 6.9, 6.8, 6.3, 0.5, 5.5), 
               Bmw = c(1.1, 1.7, 4.1, 4.2, 4, 3.4, -2.5, -4.1), Lexus = c(9.8, 0.3,2.3, 2.2, 2, 1.4, 1.9, 3.2)), row.names = c(NA, -8L), class = "data.frame")

我想使用此代码在特定列中突出显示满足条件 df$date == c("Change", "Change (%)") 的行。此外,我想用灰色突出显示除列 date 之外的所有列的行 which(df$date == "Avg")

df %>% 
  kable()  %>%  
  kable_classic(full_width = F, html_font = "Calibri")  %>%
  row_spec(which(df$date == "Avg"), bold = T, background = "#F2F2F2")  %>%
  row_spec(which(df$date == c("Change", "Change (%)")), bold = T, background = ifelse(df$Audi >= 0, "#C6EFCE", "#FFC7CE"))

我发现了一点类似的问题here,但没有弄清楚如何在我的代码中实现它

  1. 如何突出显示除日期以外的所有列的 which(df$date == c("Change", "Change (%)")) 行(条件:正值为绿色,负值为红色)

  2. 如何用灰色突出显示除日期以外的所有列的 which(df$date == c("Avg")) 行

  3. 我还发现 here 可以更改添加 mutate_all(~cell_spec(.x, color = ifelse(.x &lt; 0, "red"," green"))) 的表格中所有值的颜色,但是出现错误

UseMethod("tbl_vars") 中的错误: 没有适用于“c('kableExtra', 'knitr_kable')”类对象的“tbl_vars”方法

我该如何解决这些问题?

【问题讨论】:

  • 在这篇文章中使用了formattable包,但是,我需要坚持kable/knitr

标签: r knitr kable kableextra


【解决方案1】:

我已经部分工作了,也许它对你有点帮助。您可以使用across 函数来选择您想要的列。我尝试使用where(is.numeric) 而不是across(contains(c("Audi", "Bmw", "Lexus"))(会简单得多),但它只适用!

my_df %>% 
  # across with where(is.numeric) not working
  mutate(across(contains(c("Audi", "Bmw", "Lexus")), ~ifelse(date == "Avg",
                                                             cell_spec(x = .x, 
                                                                       background = "gray",
                                                                       bold = TRUE,
                                                                       escape = FALSE),
                                                             .x)),
         across(contains(c("Audi", "Bmw", "Lexus")), ~ifelse(date %in% c("Change", "Change (%)"),
                                                             cell_spec(x = .x, 
                                                                       background = ifelse(.x < 0, 
                                                                                           "red", 
                                                                                           "green"),
                                                                       bold = TRUE,
                                                                       escape = FALSE),
                                                             .x))) %>% 
  
  kable() %>%
  kable_classic(full_width = FALSE,
                html_font = "Calibri")

奇怪的是它没有返回正确的 html 表格。它告诉我:

<span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: gray !important;" >6.3</span>

适用于所有单元格。它确实显示了正确的背景颜色,但是 html 代码有一些东西。我还尝试将escape = FALSE 添加到cell_spec(在旧问题here 中找到了这个),但这没有任何区别。 我不知道为什么。也许这是knitrkableExtra 中的一个错误,但我无法正确处理。

希望该方法对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2021-07-16
    • 2015-11-03
    • 2018-02-24
    • 2015-12-31
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多