2017-12-25 16 views
0

Ich versuche eine checkboxGroupInput zu verwenden, um die Register zu wählen, die angezeigt werden. Wenn die Daten jedoch über mehrere Bedingungen gefiltert werden, funktioniert das nicht. Dies ist der Code Ich verwende (die verwendeten Daten here heruntergeladen werden können):Filtertabelle mit mehreren Bedingungen mit glänzenden

Bibliothek (glänzend)

ui <- fluidPage(

    titlePanel("Shiny Pokédex"), 

    sidebarLayout(
    sidebarPanel(
     checkboxGroupInput("Generation", "Select Generation:", 
          c("First" = 1, 
          "Second" = 2, 
          "Third" = 3, 
          "Forth" = 4, 
          "Fifth" = 5, 
          "Sixth" = 6), 
          inline = T) 
    ), 
    mainPanel(
     dataTableOutput("Generation") 
    ) 
) 
) 

server <- function(input, output) { 
    pokemon <- read.csv("pokemon.csv") 

    output$Generation <- renderDataTable({ 
     pokemon[pokemon$Generation == input$Generation,-11] 
    }) 
} 

shinyApp(ui = ui, server = server) 

Mein Ziel ist es, mehr als eine Generation in der gleichen Zeit zu filtern. Wenn es nur mit einer Bedingung gemacht wird, funktioniert es, aber wenn man auf mehr als eine Option klickt, ist die Ausgabe nicht wie erwartet.

Antwort

1

Sie verwenden ==, die für bestimmte Gleichheit vorgesehen ist. Das heißt:

1 == 1 
# [1] TRUE 
1 == 2 
# [1] FALSE 

Aber wenn Sie tun Multiples auf einer Seite starten oder die andere:

1 == c(1,2) 
# [1] TRUE FALSE 

In diesem Fall heißt es, dass „1 gleich 1 ist, 1 ist nicht gleich 2 "Das ist nicht ganz das, was du willst. wo der eine TRUE über alle Zeilen recycelt wird und alles zurückgibt.

die %in% Lassen Sie versuchen:

1 %in% 1 
# [1] TRUE 
1 %in% c(1,2) 
# [1] TRUE 
c(1,3,4) %in% c(1,2) 
# [1] TRUE FALSE FALSE 

Dies hat die gewünschten Eigenschaften von Set-Mitgliedschaft und einen logical Vektor der gleichen Länge wie die linken Seite des Operators zurückkehrt.

Ihre Benutzung Auftragen, nur die eine reaktive Komponente ändern zu:

output$Generation <- renderDataTable({ 
    pokemon[pokemon$Generation %in% input$Generation,-11] 
})