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})
})
Nicht sicher, aber Sie sollten versuchen, Faktor (c ("Wirtschaft", "Premium Economy", "Geschäft", "zuerst"), levels = c ("Wirtschaft", "Premium Economy", "Geschäft", "first")) –
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 –
Setzen Sie die Faktorstufe für die 'dat.frame $ -Spalte ', dann verwenden Sie im Dropdown-Menü' options = as.character (dataframe $ Column)' – SymbolixAU