【问题标题】:bold entries in r data.frame RMarkdownr data.frame RMarkdown 中的粗体条目
【发布时间】:2021-07-05 17:44:56
【问题描述】:

我在 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))

【问题讨论】:

    标签: r dataframe kable


    【解决方案1】:

    我们可以通过cell_spec 做到这一点

    1. 循环across数据集的列,添加cell_spec层和bold参数作为逻辑向量,即TRUE,其中列值为max==
    2. 转换为 kable 并使用帖子中的 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)) 
    

    【讨论】:

    • 感谢@akrun 如果我想通过行来实现,我该怎么办?
    • @MelihAras 使用 row_spec 而不是 cell_spec,这应该在 mutate 之外。对于列,它是column_spec
    猜你喜欢
    • 2021-02-19
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2022-08-14
    相关资源
    最近更新 更多