2016-04-14 5 views
0

Ich versuche, das Dropdown-Menü eines selectInput mit eindeutigen Werten in einer Spalte in der Datei zu füllen, die der Benutzer hochladen wird. Aber das Problem ist, dass ich die Entscheidungen in einer bestimmten nicht-alphabetischen Reihenfolge angezeigt werden möchte, so kann ich einfach nicht verwendenShiny - Zeigt die Optionen einer ausgewählten Eingabe in einer bestimmten (nicht alphabetischen) Reihenfolge an

updateSelectInput(....., choices = sort(unique(dataframe$column))) 

Die vier möglichen Optionen sind: Wirtschaft, Premium Economy, Business und erste. Ich möchte sie in der Reihenfolge anzeigen, in der sie im Datenrahmen vorhanden sind.

Vielen Dank im Voraus für Ihre Hilfe!

+0

Nicht sicher, aber Sie sollten versuchen, Faktor (c ("Wirtschaft", "Premium Economy", "Geschäft", "zuerst"), levels = c ("Wirtschaft", "Premium Economy", "Geschäft", "first")) –

+0

Danke für die Antwort. Ich habe versucht 'Auswahl = Faktor (einzigartig (Datenrahmen $ Spalte), Ebenen = c (" Wirtschaft "," Premium Economy "," Business "," First "), bestellt = TRUE', im Dropdown-Menü jedoch nur Zeigt die Indizes der Ebenen an, die in der Spalte vorhanden sind –

+0

Setzen Sie die Faktorstufe für die 'dat.frame $ -Spalte ', dann verwenden Sie im Dropdown-Menü' options = as.character (dataframe $ Column)' – SymbolixAU

Antwort

2

fixiert ich das Problem mit einem Hauch von @Symbolix. Ich habe zuerst einen Faktor:

cabin <- factor(dataframe$column, levels = c("Economy", "Premium Econ", "Business", "First")) 

Im updateSelectInput, ich habe

...., choices = levels(factor(cabin)) 

factor wieder aufrufen entfernt die nationalen Agenturen, die für die Ebenen nicht in dem Datensatz generiert werden.

1

Wenn der Satz von 4 Optionen, die Sie erwähnt haben, in Ihrer App fest codiert werden kann, können Sie dazu intersect verwenden. Nehmen wir an, Sie legen den Inhalt der Datei, die der Benutzer hochgeladen hat, in einen data.frame mit der Bezeichnung d1, und die Spalte von Interesse ist Class. Rufen Sie die Optionen ab, indem Sie die vollständigen Optionen mit den eindeutigen Ebenen in den Daten überschneiden.

ui.R

library(shiny) 
shinyUI(fluidPage(
    titlePanel("SelectInput using ordered unique choices from a column"), 
    sidebarLayout(
    sidebarPanel(fileInput(inputId = "SampleFile", label = "Upload a csv")), 
    mainPanel(
     uiOutput("Drop1"), 
     uiOutput("Drop2"), 
     textOutput(outputId = "outCLASS1"), 
     textOutput(outputId = "outCLASS2") 
    ) 
) 
)) 

server.R

library(shiny) 
shinyServer(function(input, output) { 

    d1 = reactive({ 
    if(is.null(input$SampleFile)){return(NULL) 
    } else {d1 = read.csv(input$SampleFile$datapath) 
    return(d1)} }) 

    AllOptions = c("economy", "premium economy", "business", "first") 

    OptionSet1 = reactive({intersect(AllOptions, levels(d1()$Class)) }) 
    output$Drop1 = renderUI({ selectizeInput(inputId = "CLASS1", label = "Pick a class", choices = OptionSet1())}) 

    OptionSet2 = reactive({intersect(AllOptions, levels(d1()$Category2)) }) 
    output$Drop2 = renderUI({ selectizeInput(inputId = "CLASS2", label = "Pick a class", choices = OptionSet2())}) 

    output$outCLASS1 = reactive({input$CLASS1}) 
    output$outCLASS2 = reactive({input$CLASS2}) 

}) 
Verwandte Themen