r data.frame RMarkdown 中的粗体条目

bold entries in r data.frame RMarkdown

我在 RMarkdown 中列出了我的结果。我想在每列中以粗体显示最大值。我怎样才能做到这一点? 请参阅下面的代码和输出(如 png)。

data<-data.frame(A=c(1,2,4,3),  B=c(8,7,9,10), C=c(14,12,13,11), D=c(15,18,17,16))
rownames(data)<-c("E", "F", "G", "H")

library(knitr)
library(kableExtra)

kable(data) %>%
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed"), 
  ) %>%
  add_header_above(c( '', Group1 = 2, Group2 = 2))

我们可以用 cell_spec

  1. 循环 across 数据集的列,添加带有 bold 参数的 cell_spec 层作为逻辑向量,即 TRUE,其中列值为 max,带有 ==
  2. 转换为 kable 并使用 post
  3. 中的 OP 代码
library(dplyr)
library(knitr)
library(kableExtra)
data %>%
  mutate(across(everything(), ~ cell_spec(., bold = . == max(.)))) %>%
  kable(escape = FALSE, booktabs = TRUE) %>%
  
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed"), 
  ) %>%
  add_header_above(c( '', Group1 = 2, Group2 = 2)) 

-输出


如果这需要按行最大值,那么一个选项是 transpose

data %>% t %>%
  as.data.frame %>%
  mutate(across(everything(), ~ cell_spec(., bold = . == max(.)))) %>%
  t %>%
  as.data.frame %>%
  kable(escape = FALSE, booktabs = TRUE) %>%
  
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed"), 
  ) %>%
  add_header_above(c( '', Group1 = 2, Group2 = 2)) 

-输出


或者对于行向,使用 apply

创建 cell_spec
data[] <- t(apply(data, 1, function(x) cell_spec(x, bold = x == max(x))))

data %>%
  kable(escape = FALSE, booktabs = TRUE) %>%
  
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed"), 
  ) %>%
  add_header_above(c( '', Group1 = 2, Group2 = 2)) 

或者可以使用 collapse 中的 dapply 来加快执行速度

library(collapse)
dapply(data, MARGIN = 1, FUN = function(x) cell_spec(x, bold = x == fmax(x))) %>% 
  kable(escape = FALSE, booktabs = TRUE) %>%
  
  kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed"), 
  ) %>%
  add_header_above(c( '', Group1 = 2, Group2 = 2))