2017-10-11 5 views
0

In einer Shiny App habe ich eine Spalte von Zahlen in einer datatable, wo aus Sicherheitsgründen einige Werte unterdrückt wurden und wir diese durch eine bestimmte Zeichenfolge ersetzen möchten , die ich hier anrufen werde "my_string". Wenn diese Spalte sortiert wird, müssen diese unterdrückten Werte so sortiert werden, als wären sie weniger als alle tatsächlichen Zahlen. In dieser Spalte sind alle Werte positiv, mit Ausnahme der unterdrückten Werte, die als -1 codiert wurden.R Shiny DataTables ersetzen numerische durch string und sortieren als weniger als numerische Werte

Ich habe versucht Umkodierung der -1 als "my_string" (die um die Säule zu character coerces) und mit Hilfe der natural plug-in die Zeichencodierten Numerik richtig zu sortieren, aber "my_string" sortiert wird, als ob es größer als alle der numerischen Werte ist .

Ein andere Möglichkeit, dies zu umgehen könnte einen JavaScript Rückruf zu verwenden, die -1 mit der Zeichenfolge zu ersetzen, aber ich weiß nicht, wie das Skript zu schreiben und richtig fügen Sie es die datatable zu.

Hier ist mein Versuch mit dem natural Plug-in. Wenn es funktioniert wie ich will, würde die Zeile mit "my_string" am Ende der Liste statt an der Spitze stehen.

# Example data, representing how the data comes to me 
my_mtcars <- mtcars[1:6, 1:4] 
my_mtcars[1, 4] <- -1 

# Here I am recoding the -1 
my_mtcars[my_mtcars == -1] <- 'my_string' 

# This is our demo app.R 
library(shiny) 
library(DT) 

ui <- fluidPage(
    dataTableOutput('example') 
) 

server <- function(input, output) { 
    output$example <- renderDataTable(
    my_mtcars, 
    server = FALSE, 
    plugins = 'natural', 
    options = list(columnDefs = list(list(type = 'natural', targets = '_all'))) 
) 
} 

shinyApp(ui = ui, server = server) 

enter image description here

Antwort

1

Dies ist wahrscheinlich einfacher, mit einer benutzerdefinierten Formatierer/Spalte Funktion machen.

siehe Spalte Rendering in der DT-Dokumentation: https://rstudio.github.io/DT/options.html

Und die Tables docs: https://datatables.net/reference/option/columns.render

my_mtcars <- mtcars[1:6, 1:4] 
my_mtcars[1, 4] <- -1 

formatSuppressedValues <- JS(" 
    function(data, type) { 
    if (type !== 'display') return data; 
    if (data !== -1) return data; 
    return 'my_string'; 
    } 
") 

library(shiny) 
library(DT) 

ui <- fluidPage(
    DT::dataTableOutput('example') 
) 

server <- function(input, output) { 
    output$example <- DT::renderDataTable(
    my_mtcars, 
    server = FALSE, 
    options = list(
     columnDefs = list(list(
     targets = '_all', 
     render = formatSuppressedValues 
    )) 
    ) 
) 
} 

shinyApp(ui = ui, server = server) 
+0

Perfect, danke! Es ist auch sehr hilfreich zu sehen, wie die allgemeine Dokumentation der Datentabellen dem R 'DT'-Kontext zugeordnet ist. Ein Hinweis für zukünftige Besucher - ich hatte 'server = FALSE' in meinem Beispiel nur aufgenommen, weil das 'natural'-Plug-In dies erfordert, es ist für diese Lösung eigentlich nicht nötig. –

Verwandte Themen