2016-12-12 9 views
0

Ich habe eine Frage über die Verwendung der CheckboxGroupInput. Wir möchten einen Filter erstellen, der die Monate der Daten aus dem Datenrahmen filtern kann. In der Filterfunktion von dplyr müssen wir als Beispiel c (1,2,3,4) < verwenden. Jetzt möchten wir dies mit einem checkboxGroupInput erzeugen, damit wir ausgewählte Monate in einem ggplot anzeigen können.checkboxGroupInput Wert für dplyr Filterung

Es arbeitet mit dem folgenden Code:

filter(Location == input$locatie & month(Month_StartConnection) %in% c(1,2,3,4)) 

c (1,2,4,5) mit dem checkboxGroupInput Eingang dynamisch sein muss.

Dank

## app.R ## 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Basic dashboard"), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Test", tabName = "KPI", icon = icon("dashboard")), 
     menuItem("Widgets", tabName = "widgets", icon = icon("th")) 
    ) 
), 
    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "KPI", 
       fluidRow(
       checkboxGroupInput(inputId = "seizoen", label = "Seizoen", choices = list("Alle Maanden", 1,2,"mrt","apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"), value = TRUE), 
       selectInput(inputId = "locatie", 
            label = h3("Locatie"), 
            choices = c("Speerpunt","Museum","Strandweg", "Zwarte pad", "Prins Clauslaan", "Prinsessegracht", "Fluwelen Burgwal", "Kranestraat", "Heulstraat", "Kneuterdijk", "Hoge Nieuwstraat", "Kijkduin", "De Uithof", "Zwembad het Hofbad", "Kyocera stadion", "Stadhuis"), 
            selected = 1 
       ), 
       plotOutput("ggplot", height = 600, width= 600) 
      ) 
    ), 

     # Second tab content 
     tabItem(tabName = "widgets", 
       h2("Widgets tab 1") 
    ) 
    ) 
)) 

server <- function(input, output) { 

    output$ggplot <- renderPlot({ 

    print(
     Merge_Charge_Point %>% 
     select(Charge_Point_ID, Location, kWh, Month_StartConnection) %>% 
     filter(Location == input$locatie & month(Month_StartConnection) %in% c(input$seizoen)) %>% 
     group_by(Month_StartConnection) %>% 
     summarise(aantal_sessies = n()) %>% 
     filter(Month_StartConnection < as.Date(format(as.Date(strptime(Sys.Date(),"%Y-%m-%d",tz="")) ,format = "%y-%m-1")))%>% 
     ggplot(aes(Month_StartConnection, aantal_sessies, group = 1))+ 
     geom_line()+scale_x_date(labels = date_format("%y-%m")) + 
     geom_smooth(method = "lm", se = FALSE) 
    ) 
    }) 
} 

shinyApp(ui, server) 
+0

weil es ein 'checboxGroupInput' Sie müssen'% in% verwenden ', statt' == ': zB' Filter (Ort% in% Eingang $ locatie) '. Dies ist, weil 'checkboxGroupInput' gibt Ihnen einen' Vektor' von Werten – SymbolixAU

+0

Vielen Dank für Ihre Eingabe, aber wir suchen nach einer Antwort für diesen Code: Monat (Month_StartConnection)% in% c (input $ abfall))) –

+0

nur eine Ahnung , aber versuche die 'list (...)' in 'c (...)' zu ändern - zum Beispiel 'choices = c (" Alle Maanden ", 1,2," mrt ", ...)' – SymbolixAU

Antwort

0

Zunächst einmal sollten Sie einige Beispieldaten veröffentlichen, ohne sie es tatsächlich nicht möglich ist, Ihren Code zu überprüfen, ob es tatsächlich funktioniert ....

auf Basis von was Sie zeigte, ich glaube, das Problem mit ist:

...%in% c(input$seizoen))...

Sie sollten nur verwendet werden:

...%in% input$seizoen)... 

nein c(...) !!

[SAMPLE CODE] Werfen Sie einen Blick auf sie, ich habe Ihre Daten nicht gesehen, deshalb hatte ich einige Beispieldaten zu erstellen, Ihnen zu zeigen, dass meine Antwort richtig ist (wenn es nur über checkboxGroupInput Wert für dplyr Filterung)

## app.R ## 
library(shinydashboard) 

x <- c("Alle Maanden", 1,2,"mrt","apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec") 
y <- c(1:13) 

data <- data.frame(x,y) 

ui <- dashboardPage(
    dashboardHeader(title = "Basic dashboard"), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Test", tabName = "KPI", icon = icon("dashboard")), 
     menuItem("Widgets", tabName = "widgets", icon = icon("th")) 
    ) 
), 
    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "KPI", 
       fluidRow(
       checkboxGroupInput(inputId = "seizoen", label = "Seizoen", choices = list("Alle Maanden", 1,2,"mrt","apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec")), 
       selectInput(inputId = "locatie", 
          label = h3("Locatie"), 
          choices = c("Speerpunt","Museum","Strandweg", "Zwarte pad", "Prins Clauslaan", "Prinsessegracht", "Fluwelen Burgwal", "Kranestraat", "Heulstraat", "Kneuterdijk", "Hoge Nieuwstraat", "Kijkduin", "De Uithof", "Zwembad het Hofbad", "Kyocera stadion", "Stadhuis"), 
          selected = 1 
       ), 
       plotOutput("ggplot", height = 600, width= 600) 
      ) 
    ), 

     # Second tab content 
     tabItem(tabName = "widgets", 
       h2("Widgets tab 1") 
    ) 
    ) 
)) 

server <- function(input, output) { 

    output$ggplot <- renderPlot({ 
    print(input$seizoen) 
    data <- data %>% 
     filter(x %in% input$seizoen) 
    print(data) 

    g <- ggplot(data,aes(x=x,y=y))+ geom_point() 
    g 

    }) 
} 

shinyApp(ui, server) 
+0

Vielen Dank für Ihre Antwort Es ist nicht möglich zu zeigen die Ausgabe, aber ich kann einen Screenshot zeigen. Ich habe Ihren Code versucht, aber funktioniert nicht. [Bild von Dashboad] (http://i64.tinypic.com/5uolxs.png) Ich habe den folgenden Fehler: Ästhetik muss entweder Länge 1 oder die gleiche wie die Daten (1): x, y, Gruppe –

+0

Werfen Sie einen Blick auf die Bearbeitung !! Fehler: Es scheint, dass sthg ist falsch mit Ihrem Code beginnend mit 'Merge_Charge_Point%>% wählen (Charge_Point_ID, Location, kWh, Month_StartConnection)%>% 'aber ohne die Daten ist es schwer für mich zu sagen –

+0

Malvina, Danke, aber es funktioniert immer noch nicht ..... –