0
votes

Comment group_by () et résumer () données de manière réactive avec brillant?

Je construisai une application Web brillante qui permet aux utilisateurs d'obtenir le meilleur de DLYR (Data Wrangling & Manipulation R) sans codage dans R.

Je voudrais group_by () code> et résumez () code> en utilisant respectivement un SelectInput permettant de choisir une variable parmi tous ceux disponibles dans le fichier "Films" ( http://s3.amazonaws.com/assets.datacamp.com/production/course_4850/datasets/movies.rdata ")

Tout corps sait comment résoudre ce problème s'il vous plaît? p>

Lorsque vous utilisez la fonction Server suivante, je reçois une table vide ... p>

 if (interactive()){

  load(url("http://s3.amazonaws.com/assets.datacamp.com/production/course_4850/datasets/movies.Rdata"))

  # Libraries 
     library(dplyr)
      library(shiny)
      library(shinydashboard)
      library(DT)

  ui1 <- shinyUI(
    dashboardPage(
      dashboardHeader(title = "Data Viewer"), 
      dashboardSidebar(
        selectInput(inputId = "x", 
                    label = "Grouper par :", 
                    choices = c("title_type", "genre", "mpaa_rating",                               
                   "studio", "thtr_rel_year"), 
                    selected = "thtr_rel_year"),
        selectInput(inputId = "y", 
                    label = "Résumé par :", 
                    choices = c("runtime","imdb_num_votes", 
                    "critics_score", "audience_score"), 
                    selected = "runtime")
      ), 
      dashboardBody(
        fluidPage(
          box(DT::dataTableOutput(outputId = "table"), title="Résumé des données :", height = 300)
        )
      )
    )
  )
server1 <- shinyServer(function(input, output){
    output$table <- DT::renderDataTable({
      moviesSummarise <- movies %>% 
        group_by(genre) %>% 
        ## It doesn't work when I tried group_by(input$x)

        summarise(Moyenne = mean(runtime)) 
        ## It doesn't work when I tried summarise(input$y)

      DT::datatable(data = moviesSummarise)
    })
  })
  shinyApp(ui = ui1, server = server1)
}


0 commentaires

3 Réponses :


0
votes

Correction du premier serveur.

  shinyServer(function(input, output){
    output$table <- DT::renderDataTable({
      moviesSummarise <- movies %>% 
        group_by(input$x) %>%
        summarise(Moyenne = mean(input$y)) 

      DT::datatable(data = moviesSummarise)
    })
  })


1 commentaires

Merci, mais même lors de l'ajout du $ manquant pour entrer x $ x, le résultat est une table vide.



1
votes

Deux façons de faire ceci: utiliser des versions scopées de group_by et résumez (qui prendra les chaînes) ou rlang pour noter le Entrées.

ni group_by ni résumée comme des chaînes telles que les noms noirs: xxx

Utilisation des versions d'étendue : xxx

ou vous pouvez utiliser l'approche rlang et unqlez les chaînes: xxx

Donc: xxx


0 commentaires

2
votes

Avez-vous essayé d'utiliser "group_by ( get (entrée $ x) )"?

Cela a fonctionné pour moi lors de l'utilisation d'entrées réactives.

meilleur, Anne


2 commentaires

Bonjour, cela fonctionne assez bien lorsque vous utilisez Group_By (Get (Input $ x)) et résumez (obtenez-en $ $ Y)). Merci Anne :-)


C'est super! N'hésitez pas à approuver ma réponse alors :)