2017-08-29 5 views
1

J'ai une table avec 5 colonnes et la première colonne comme caractère et quatre comme numérique. J'utilise DT Data Table pour afficher la même chose dans Shiny App. Maintenant, j'ai besoin de comparer chacun des quatre cols pour chaque ligne et code de couleur de la cellule de ligne qui a la valeur maximale. Vous cherchez des façons de faire la même chose. A eu un coup d'oeil sur ce lien aussi bien StylingCells mais tous les cols sont numériques ici.Mise en forme conditionnelle dans DT Data Table 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 

     ) 

    ) 

    }) 
    } 
) 

Répondre

0

Voici ma solution à votre problème:

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

Donc ce que vous devez faire est de créer un vecteur de valeurs max. Ensuite, utilisez-le dans la fonction d'assistance styleEqual() à l'intérieur formatStyle() comme indiqué dans le code ci-dessus.

+0

Merci pour la réponse. La solution actuelle que vous avez proposée est le codage couleur de la valeur maximale à travers les colonnes et ce que je cherche à obtenir des valeurs maximales à travers les lignes et la couleur de les coder. Par exemple, selon les données de l'échantillon - Valeur maximale de la 1ère rangée: 27000, valeur maximale de la 2ème rangée: 234789 \t, valeur maximale de la 3ème rangée: 26834. Pourriez-vous nous indiquer comment réaliser la même chose? – string

+0

Oui, c'est facile à faire. Changez simplement l'argument 'MARGIN' de la fonction apply en 1. J'ai changé le code pour refléter ce changement. – jsb

+0

Merci :) .... Cela a fonctionné parfaitement. max_val <- apply (entity.data [, -1], 2, max) - Pour obtenir Max Col Value et max_val <- apply (entity.data [, -1], 1, max) - Pour obtenir Max Row Values. Juste ajouté cela pour rendre utile pour les autres. – string