在数据表R上使用多种条件和格式

在数据表R上使用多种条件和格式,r,shiny,dt,R,Shiny,Dt,条件格式数据表(多个条件和格式) 如何突出显示每行的最大值的问题在此处得到解答: 我不仅要用绿色突出显示每列的最大值,用红色突出显示最小值,还要使该列的单元格>中间值以粗体显示。我该怎么做 下面的代码来自链接问题,适合我的需要。但不幸的是,它不起作用 library(shinydashboard) library(DT) library(magrittr) entity <- c('entity1', 'entity2', 'entity3') value1 <- c(21000

条件格式数据表(多个条件和格式)

如何突出显示每行的最大值的问题在此处得到解答:

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

下面的代码来自链接问题,适合我的需要。但不幸的是,它不起作用

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))))
    })
  }
)
库(ShinydaShashboard)
图书馆(DT)
图书馆(magrittr)

实体由于每列都有单独的值,因此必须分别为每列指定值

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"))) 

    })
  }
)
shinyApp(
ui=仪表板页面(标题、侧边栏、正文),
服务器=功能(输入、输出){
输出$entity.dataTable%
formatStyle(列=2,
backgroundColor=styleInterval(切割=c(最小值[1],最大值[1]-1),值=c(“#F00”,“无”,“#00F”),
fontWeight=styleInterval(切割=中间值[1]-1,值=c(“正常”、“粗体”))%>%
formatStyle(列=3,
backgroundColor=styleInterval(切割=c(最小值[2],最大值[2]-1),值=c(“#F00”,“无”,“#00F”),
fontWeight=styleInterval(切割=中间值[2]-1,值=c(“正常”、“粗体”))%>%
formatStyle(列=4,
backgroundColor=styleInterval(切割=c(最小值[3],最大值[3]-1),值=c(“#F00”,“无”,“#00F”),
fontWeight=styleInterval(切割=中间值[3]-1,值=c(“正常”、“粗体”))%>%
formatStyle(列=5,
backgroundColor=styleInterval(切割=c(最小值[4],最大值[4]-1),值=c(“#F00”,“无”,“#00F”),
fontWeight=styleInterval(切割=中间值[4]-1,值=c(“正常”、“粗体”))
})
}
)

希望这有帮助

谢谢。这确实是我对这个特定静态数据集所需要的。但是,我的数据集随着时间的推移而变化(列的数量会增加或减少),此解决方案不适合这种变化。我想为了适应这种情况,formatStyle应该在循环中完成,具体取决于列的数量。这有可能吗?我在这里找到了答案: