2016-06-17 10 views
1

Ich versuche, den Benutzer laden eine CSV-Datei, dann eine Spalte (Faktor) dieser CSV-Datei und erstellen Benutzereingaben von, um festzustellen, welche der eindeutigen Namen in diesem Feld wird für den Datenrahmen ausgewählt.Filterung von selectInput in R glänzend

Also, wenn ich das folgende Beispiel data.frame haben:

COURSE VALUE 
1  A  7 
2  C  2 
3  C  2 
4  B  9 
... 

Ich möchte würde mit SELECT_INPUT und dem Benutzer filtern können wählen wählen sagen A und C und der Datenrahmen für gerade Zeilen gefiltert werden würde Unterhalb mit A und C ist der Code, der für die UI SELECT_INPUT

output$choose_course<-renderUI{ 
# If missing input, return to avoid error later in function 
if(is.null(input$model.input)) 
return() 

# Get the data set with the appropriate name 
course.names <-c("All",as.vector(t(unique(select_(model.data0(),"COURSE"))))) 

selectInput("courses","Choose courses", choices=course.names, multiple=TRUE)  
} 

Man beachte, dass model.data0() sind die reaktiven Daten durch den Benutzer über eine CSV-Datei eingegeben zu erzeugen. Dieser erste Teil des Codes funktioniert in Ordnung (aber vielleicht ist das Format verwirrend die nächsten Sachen?) Und zeigt für die Benutzereingabe Auswahlen an. Und nächstes haben wir meinen Versuch Filterung von der selectInput ...

model.data<-reactive({ 
if(is.null(input$model.input)) 
    return() 

localdata<-model.data0() 
if(input$courses!="All"){ 
    localdata<-localdata[localdata$COURSE==unlist(input$courses),] 
} 
}) 

Doch diese gibt einen Fehler von „Argument 1 (Typ‚Liste‘) nicht durch‚Katze‘behandelt werden“. Ich habe versucht, die Unlist oben zu einem Vektor zu ändern, aber schien nicht zu arbeiten. Irgendwelche Ideen, wie ich diesen Filter zu meinen Daten machen kann?

+0

Apologies, es scheint, dass ich nicht richtig die Ausgabe für meinen Test-Format habe und das ist, wo ich von den Fehlern. –

Antwort

2

Sie könnten versuchen, dies zu tun:

require(shiny) 

ui <- fluidPage( 
    sidebarLayout(
    sidebarPanel(
     uiOutput('choose_course') 
    ), 
    mainPanel(
     tableOutput('courseTable') 
    ) 
) 
) 

server <- function(input, output, session) { 
    # Build data, would be replaced by the csv loading in your case 
    n <- 10 
    model.data0 <- reactive ({ 
    data.frame("COURSE" = sample(LETTERS[1:3], n, replace=TRUE), 
       "VALUE" = sample(1:10, n, replace=TRUE)) 
    }) 

    # Render selectInput 
    output$choose_course <- renderUI({ 
    course.names <- as.vector(unique(model.data0()$COURSE)) 
    selectInput("courses","Choose courses", choices=course.names, multiple=TRUE)  
    }) 

    # Subset so that only the selected rows are in model.data 
    model.data <- reactive({ 
    subset(model.data0(), COURSE %in% input$courses) 
    }) 

    output$courseTable <- renderTable({ model.data() }) 
} 
runApp(shinyApp(ui,server)) 
+0

Vielen Dank! Ich werde dies für die Zukunft in Erinnerung behalten, da ich mein Programm funktioniert habe. –

+0

Ich bin froh, dass ich dir helfen konnte, ich habe deinen Kommentar missbraucht, deshalb habe ich anwser geschrieben. Kein Schaden, ich schätze. –

Verwandte Themen