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

基于Target列百分比规则条件格式化DT的Roll_3_Weeks列

解决方案

要实现基于每行Target列动态阈值的Roll_3_Weeks列条件格式化,不能用styleInterval(它仅支持全局固定阈值),需要借助JS自定义函数在formatStyle中实现行级的动态判断。

修改后的完整代码

output$backs_week_table <- renderDT({
  datatable(Backs_td_week,
            extensions = 'FixedColumns',
            options = list(
              pageLength = 15,
              fixedColumns = list(leftColumns = 3),
              dom = 't', # 仅显示表格,隐藏搜索和分页
              columnDefs = list(
                list(targets = c(0, 1), className = 'dt-left'), # 前两列左对齐
                list(targets = seq(1, ncol(Backs_td_week) - 1), className = 'dt-center') # 第三列及以后居中对齐
              ),
              rowCallback = JS('function(row, data, index) {
                               $("td", row).css("padding-top", "5px");
                               $("td", row).css("padding-bottom", "5px");
                             }')
            ),
            rownames = FALSE
  ) %>%
    formatStyle(
      names(Backs_td_week),
      border = '1px solid #ddd' # 添加单元格边框
    ) %>%
    formatStyle(
      names(Backs_td_week)[grepl("Perc_", names(Backs_td_week))],
      valueColumns = names(Backs_td_week)[grepl("Perc_", names(Backs_td_week))],
      color = 'black',
      background = styleColorBar(
        sapply(Backs_td_week[, grepl("Perc_", names(Backs_td_week))], function(x) scales::rescale(x, to = c(0, 100))), 'indianred')
    ) %>%
    # 新增:Roll_3_Weeks列的条件格式化
    formatStyle(
      columns = "Roll_3_Weeks", # 要格式化的目标列
      valueColumns = c("Roll_3_Weeks", "Target"), # 需要用到的两列数据
      backgroundColor = JS(
        "function(value, row) {",
        "  const threshold = row.Target * 3 * 0.95;", # 计算每行的动态阈值
        "  return value >= threshold ? '#90EE90' : '#FF6347';", # 满足条件设绿色,否则红色
        "}"
      ),
      color = "black" # 文本颜色设为黑色,保证可读性
    )
})

关键说明

  1. 动态阈值计算:通过row.Target获取当前行的Target值,计算出Target*3*0.95的阈值,实现每行不同的判断标准。
  2. 颜色选择:示例中用#90EE90(浅绿色)和#FF6347(浅红色),你可以根据需求替换为其他颜色代码或颜色名称。
  3. 列名匹配:确保columns和valueColumns中的列名与你的数据框Backs_td_week中的实际列名完全一致,否则会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:16:04