You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改R-Knitr的Kable函数以高亮每行指定列的最大值?

问题描述

现有数据框x:

x <- structure(list(`A. afarensis` = c(NaN, 41.624448481617, NaN, 
44.3444026007235, 45.637877314444), `A. africanus` = c(NaN, 40.8108406931158, 
NaN, 17.6702611050343, 28.8624817479424), `A. anamensis` = c(NaN, 
3.96543899879134, NaN, 13.4563973882188, 7.02306143133709), `Ar. ramidus` = c(NaN, 
3.31720723035651e-05, NaN, 0.00154294031842416, 7.49122553868537e-05
), Australopithecus = c(NaN, 6.97874566506872, NaN, 4.99347711237018, 
6.04930517572641), tooth = c("M1", "M1", "M1", "M1", "M1")), row.names = c("1", 
"2", "3", "4", "5"), class = "data.frame")

需求:将每行中从A. afarensis到Australopithecus列的最大值设置为加粗且红色背景高亮。

已编写的fun_kable函数:

fun_kable <- function(data){
  kable(data, digits = 2) %>%
    kable_classic(full_width = T, 
                  html_font = "Cambria", 
                  font_size = 10) %>%
    column_spec(ncol(data), bold = T, italic = T, color = "red")
}

需要修改该函数,使得运行fun_kable(x)时实现上述高亮需求。

修改后的函数与说明

要实现行内最大值的高亮,需结合row_spec逐行判断最大值位置并应用样式,修改后的函数如下:

library(kableExtra)

fun_kable <- function(data){
  # 确定需要检查的目标列范围(排除最后一列tooth)
  target_cols <- 1:(ncol(data)-1)
  
  # 逐行生成样式规则:定位该行最大值所在列,设置加粗和红色背景
  row_styles <- lapply(1:nrow(data), function(i){
    row_vals <- data[i, target_cols, drop = FALSE]
    max_val <- max(row_vals, na.rm = TRUE)
    # 标记出等于最大值的单元格(兼容一行多最大值的情况)
    highlight_cols <- which(row_vals == max_val)
    
    row_spec(i, 
             column = highlight_cols, 
             bold = TRUE, 
             background = "#ffcccc") # 浅红色背景,可自行替换颜色代码
  })
  
  # 生成表格并批量应用所有行样式
  kable(data, digits = 2) %>%
    kable_classic(full_width = TRUE, 
                  html_font = "Cambria", 
                  font_size = 10) %>%
    `%>%`(!!!row_styles)
}

关键修改说明:

  • 定义target_cols明确只处理前5列(从A. afarensis到Australopithecus),排除最后一列tooth。
  • 通过lapply逐行处理:提取每行目标列的值,忽略NaN找到最大值,定位最大值所在列。
  • 用row_spec为对应单元格设置加粗和红色背景(示例用#ffcccc,可根据需求调整颜色代码)。
  • 借助!!!将所有行样式批量应用到表格上,避免重复代码。

运行fun_kable(x)后,每行目标列中的最大值会自动被加粗并高亮红色背景。

内容的提问来源于stack exchange,提问作者antecessor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:35:36