使用styleInterval和rule条件格式化DT数据表

问题描述 投票:0回答:1

您好,我有一个渲染的数据表,我想根据目标列中的值有条件地格式化 Roll_3_Weeks 列。

我尝试过使用 styleInterval,但我希望格式基于百分比,并且该函数似乎需要整数。

具体来说,如果 Roll_3_Weeks 单元格在目标值*3 的 95% 范围内,我想将其着色为绿色,在所有其他情况下将其着色为红色。

我的表格的图像如下,这是我当前的代码片段 预先感谢!

 output$backs_week_table <- renderDT({
    datatable(Backs_td_week,
              extensions = 'FixedColumns',
              options = list(
                pageLength = 15,
                fixedColumns = list(leftColumns = 3),
                dom = 't', # Show only the table without search and pagination
                columnDefs = list(
                  list(targets = c(0, 1), className = 'dt-left'), # Left-align the first two columns
                  list(targets = seq(1, ncol(Backs_td_week) - 1), className = 'dt-center') # Center-align columns starting from the third column 
                ),
                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' # Add cell borders
      ) %>%
      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')
      )
  })
r shiny dt
1个回答
0
投票

使用 DT,您可以添加一个助手

valueColumn
,虽然隐藏在输出中,但它决定另一列的样式。

示例:

## sample data:
d <- data.frame(Roll_3_Weeks = c(1, 3), Target = 1)
d$is_extreme <- ifelse(d$Roll_3_Weeks <= .95 * 3 * d$Target, 0, 1)
## > d
##   Roll_3_Weeks Target is_extreme
## 1            1      1          0
## 2            3      1          1
datatable(d, 
          options = list(
            ## hide helper column 'is_extreme':
            columnDefs = list(list(targets = 'is_extreme', visible = FALSE))
          )
          ) |>
  formatStyle(
    columns = 'Roll_3_Weeks', valueColumns = 'is_extreme',
    backgroundColor = styleEqual(c(0, 1), c('green', 'red'))
    )
  )

© www.soinside.com 2019 - 2024. All rights reserved.