您好,我有一个渲染的数据表,我想根据目标列中的值有条件地格式化 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')
)
})
使用 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'))
)
)