【问题标题】:R Shiny Datatable color cell based on value range基于值范围的 R Shiny Datatable 颜色单元
【发布时间】:2019-07-07 23:06:42
【问题描述】:

我有这个数据集:

test <- data.frame("type" = c("A", "B", "C", "D"), "goal" = c(3000,4500,250,2000),"Jan" = c(4000,2000,240,800), "Feb" = c(2000,3000,300,1500), "Mar" = c(2800,4000,100,1400) )

我希望有一个数据表在我闪亮的应用程序中使用以下标准用颜色编码的单元格显示这个:

绿色:低于目标的 60% 琥珀色:目标的 60-80% 红色:超过目标的 80%

Desired Output

我在 renderDatatable 函数中使用了 JSCallback 选项,但它似乎需要单元格为百分比而不是实际数字。任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 请展示您尝试过的一些想法/示例。我们可以根据这些想法为您提供帮助。
  • 在 DT 页面 rstudio.github.io/DT/functions.html 上有很多例子可以做到这一点

标签: r shiny color-scheme dt


【解决方案1】:

这是我可以使用styleInterval 提出的一个,但不确定您需要多大的可扩展性。

  • 我们首先基于目标与实际间隔的逻辑值
  • 使用它为单元格着色
#courtesy: https://stackoverflow.com/a/50950368/5086335

library(DT)

test <- data.frame("type" = c("A", "B", "C", "D"), "goal" = c(3000,4500,250,2000),"Jan" = c(4000,2000,240,800), "Feb" = c(2000,3000,300,1500), "Mar" = c(2800,4000,100,1400) )

# Green: Below 60% of goal Amber: 60-80% of goal Red: Above 80% of goal


test$jan_goal <- ifelse(test$Jan > test$goal * 0.8, 2,
                        ifelse(test$Jan < test$goal * 0.6, 0,
                               1))

test$feb_goal <- ifelse(test$Feb > test$goal * 0.8, 2,
                        ifelse(test$Feb < test$goal * 0.6, 0,
                               1))

test$mar_goal <- ifelse(test$Mar > test$goal * 0.8, 2,
                        ifelse(test$Mar < test$goal * 0.6, 0,
                               1))


      DT::datatable(
        test,
        rownames = FALSE,
        options = list(
          columnDefs = list(list(targets = c(5,6,7), visible = FALSE))
        )
      ) %>% 
        formatStyle(columns = "Jan",
                    valueColumns = "jan_goal",
                    backgroundColor = styleEqual(levels = c(0,1,2), values = c("#008000","#FFA500","#F00"))) %>% 
        formatStyle(columns = "Feb",
                    valueColumns = "feb_goal",
                    backgroundColor = styleEqual(levels = c(0,1,2), values = c("#008000","#FFA500","#F00"))) %>% 

        formatStyle(columns = "Mar",
                    valueColumns = "mar_goal",
                    backgroundColor = styleEqual(levels = c(0,1,2), values = c("#008000","#FFA500","#F00")))

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2015-11-29
    • 2017-03-20
    相关资源
    最近更新 更多