【问题标题】:Use multiple conditions and formats on datatable R shiny在数据表 R 上使用多种条件和格式
【发布时间】:2018-06-20 11:45:10
【问题描述】:

条件格式数据表 R 闪亮(多种条件和格式)

这里回答了如何突出显示每一行的最大值的问题: Conditional formatting in DT Data Table R Shiny

我不仅要以绿色突出显示每列的最大值,以红色突出显示最小值,还要使那些单元格 > 该列的中位数以粗体显示。我该怎么做?

以下代码来自链接的问题,适合我的需要。但不幸的是没有工作。

library(shinydashboard)
library(DT)
library(magrittr)

entity <- c('entity1', 'entity2', 'entity3')
value1 <- c(21000, 23400, 26800)
value2 <- c(21234, 23445, 26834)
value3 <- c(21123, 234789, 26811)
value4 <- c(27000, 23400, 26811)
entity.data <- data.frame(entity, value1, value2, value3, value4)

# Create a vector of max values
max_val <- apply(entity.data[, -1], 2, max)
# Create a vector of min values
min_val <- apply(entity.data[, -1], 2, min)
# Create a vector of median values
median_val <- apply(entity.data[, -1], 2, median)

header <- dashboardHeader()
sidebar <- dashboardSidebar()
body <- dashboardBody(DT::dataTableOutput("entity.dataTable"))

shinyApp(
  ui = dashboardPage(header, sidebar, body),
  server = function(input, output) {
    output$entity.dataTable <- renderDataTable({
      DT::datatable(
        entity.data,
        rownames = FALSE,
      ) %>% 
        formatStyle(columns = 2:5,
                   backgroundColor = styleEqual(levels = max_val, values = rep("green", length(max_val))))%>%
        formatStyle(columns = 2:5,
                    backgroundColor = styleEqual(levels = min_val, values = rep("red", length(min_val))))
    })
  }
)

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    由于每列都有单独的值,因此必须为每列分别分配值

    shinyApp(
      ui = dashboardPage(header, sidebar, body),
      server = function(input, output) {
        output$entity.dataTable <- renderDataTable({
          DT::datatable(
            entity.data,
            rownames = FALSE,
          ) %>% 
            formatStyle(columns = 2,
                        backgroundColor = styleInterval(cuts =c(min_val[1],max_val[1]-1), values = c("#F00","none","#00F")),
                        fontWeight = styleInterval(cuts= median_val[1]-1,values = c("normal","bold"))) %>% 
            formatStyle(columns = 3,
                        backgroundColor = styleInterval(cuts =c(min_val[2],max_val[2]-1), values = c("#F00","none","#00F")),
                        fontWeight = styleInterval(cuts= median_val[2]-1,values = c("normal","bold")))%>% 
            formatStyle(columns = 4,
                        backgroundColor = styleInterval(cuts =c(min_val[3],max_val[3]-1), values = c("#F00","none","#00F")),
                        fontWeight = styleInterval(cuts= median_val[3]-1,values = c("normal","bold")))%>% 
            formatStyle(columns = 5,
                        backgroundColor = styleInterval(cuts =c(min_val[4],max_val[4]-1), values = c("#F00","none","#00F")),
                        fontWeight = styleInterval(cuts= median_val[4]-1,values = c("normal","bold"))) 
    
        })
      }
    )
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢。对于这个特定的静态数据集,这确实是我所需要的。但是,我的数据集随时间而变化(列数增加和减少),并且该解决方案不适应这种变化。我想为了适应这一点, formatStyle 应该在一个循环中完成,具体取决于列数。这有可能吗?
    • 我在这里找到了答案:stackoverflow.com/questions/50904467/…
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2018-06-03
    • 2016-09-13
    • 2012-07-11
    相关资源
    最近更新 更多