2017-08-29 1 views
1

Ich habe eine Tabelle mit 5 Spalten und 1. Spalte als Zeichen und anderen vier als numerisch. Ich verwende DT Data Table, um dasselbe in Shiny App anzuzeigen. Jetzt muss ich jeden der vier Spalten für jede Zeile und Farbcode die Zeile Zelle, die maximalen Wert hat. Auf der Suche nach Möglichkeiten, das Gleiche zu tun. Hatte einen Blick auf diesen Link StylingCells aber alle Spalten sind hier numerisch.Bedingte Formatierung in DT-Daten Tabelle R Shiny

-Code

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) 

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, 
     selection = "single", 
     filter = 'bottom', 

     extensions = c('Buttons', 'ColReorder', 'FixedHeader', 'Scroller'), 
     rownames = FALSE, 
     options = list(
      dom = 'Bfrtip', 
      searching = T, 
      pageLength = 25, 
      searchHighlight = TRUE, 
      colReorder = TRUE, 
      fixedHeader = TRUE, 
      filter = 'top', 
      buttons = c('copy', 'csv', 'excel', 'print'), 
      paging = TRUE, 
      deferRender = TRUE, 
      scroller = TRUE, 
      scrollX = TRUE, 
      scrollY = 550 

     ) 

    ) 

    }) 
    } 
) 

Antwort

0

Hier ist meine Lösung für Ihr Problem:

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], 1, max) 

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, 
     selection = "single", 
     filter = 'bottom', 
     extensions = c('Buttons', 'ColReorder', 'FixedHeader', 'Scroller'), 
     rownames = FALSE, 
     options = list(
      dom = 'Bfrtip', 
      searching = T, 
      pageLength = 25, 
      searchHighlight = TRUE, 
      colReorder = TRUE, 
      fixedHeader = TRUE, 
      filter = 'top', 
      buttons = c('copy', 'csv', 'excel', 'print'), 
      paging = TRUE, 
      deferRender = TRUE, 
      scroller = TRUE, 
      scrollX = TRUE, 
      scrollY = 550 
     ) 
    ) %>% # Style cells with max_val vector 
     formatStyle(
     columns = 2:5, 
     backgroundColor = styleEqual(levels = max_val, values = rep("yellow", length(max_val))) 
    ) 
    }) 
    } 
) 

Also, was Sie tun müssen, um einen Vektor von max Werte zu schaffen. Dann verwenden Sie es in der Hilfsfunktion styleEqual() innerhalb formatStyle() wie im obigen Code gezeigt.

+0

Vielen Dank für die Antwort. Die aktuelle Lösung, die Sie vorgeschlagen haben, ist die Farbcodierung des maximalen Werts über die Spalten und was ich suche, um maximale Werte über die Zeilen hinweg zu erhalten und sie farblich zu codieren. Zum Beispiel, gemäß den Beispieldaten - 1. Reihe Max-Wert: 27000, 2. Reihe Max-Wert: 234789 \t, 3. Reihe Max-Wert: 26834. Könnten Sie bitte Anleitung, wie Sie das gleiche erreichen. – string

+0

Ja, das ist einfach zu machen. Ändern Sie einfach das 'MARGIN'-Argument der Anwendungsfunktion auf 1. Ich habe den Code geändert, um diese Änderung widerzuspiegeln. – jsb

+0

Danke :) .... Es hat perfekt funktioniert. max_val <- apply (entity.data [, -1], 2, max) - Um Max Col Value und max_val string