R Shiny Reactive SelectInput - PullRequest
       17

R Shiny Reactive SelectInput

0 голосов
/ 19 апреля 2020

Привет всем,

Мне нужна ваша помощь, пожалуйста: у меня есть фрейм данных с именем data_test, вы можете воспроизвести его с помощью следующих строк:

 PC<-c('001','002','003','004','005','006','007','008','009','010')
 A<-c('2','2','1','1','2','0','2','0','1','0')
 B<-c('0','2','0','0','1','0','0','0','1','0')
 C<-c('1','0','0','0','2','2','0','0','0','1')
 NB_CARS<-c('1','3','1','1','0','2','1','3','2','2')
 data_test <- data.frame(PC, A, B, C, NB_CARS)

И у меня есть три связанных chekboxGroupInputs с именем " переменная1 "," переменная2 "и" переменная3 ". Когда я проверяю некоторые из этих chekboxGroupInputs, количество соответствующих строк обновляется. Но я хотел бы вставить реактивный SelectInput, чтобы показать результирующее количество автомобилей на основе переменной "NB_CARS", и мне не удается это сделать. Не могли бы вы мне помочь ? Большое спасибо.

Это мой код:

 ui <- fluidPage(
   fluidRow(
     column(3,
            checkboxGroupInput("variable1", "Occurences of column A :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable2", "Occurences of column B :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable3", "Occurences of column C :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0"))),

     column(3,
            tableOutput("data")),

     column(3,
            textOutput("result"))
   )
 )

 server <- function(input, output, session) {

   result <- 0

   df1 <- reactive({
     filter(data_test,
            (is.null(input$variable1) | A %in% input$variable1),
            (is.null(input$variable2) | B %in% input$variable2),
            (is.null(input$variable3) | C %in% input$variable3))
   })

   output$result <- renderText(paste("Number of occurences = ", nrow(df1())))


   output$data <- renderTable({df1()})

 }

 shinyApp(ui, server)

1 Ответ

0 голосов
/ 19 апреля 2020

Я не уверен, что это то, что вы имеете в виду, но, возможно, это будет полезно (если нет, дайте мне знать).

Вы можете добавить selectInput в свой ui, что будет обновлен на updateSelectInput в вашем server.

Редактировать 1 : output$result изменен, чтобы показать количество строк, соответствующих input$numcars. Другими словами, если вы выбираете из нового input$numcars selectInput, вы увидите, сколько раз NB_CARS соответствует сделанному выбору.

Редактировать 2 : Если вы хотите sh добавить All в качестве выбора, помните, что NB_CARS является фактором. Таким образом, вы получаете уровни фактора с неожиданными результатами (например, 4). Вы можете использовать as.character перед объединением с All для получения желаемого результата.

Кроме того, когда вы визуализируете текст, просто проверьте, является ли ввод All - если это так, покажите количество строк. Если нет, покажите NB_CARS совпадений. См. Отредактировано server.

ui <- fluidPage(
  fluidRow(
    column(3,
           checkboxGroupInput("variable1", "Occurences of column A :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0")),
           checkboxGroupInput("variable2", "Occurences of column B :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0")),
           checkboxGroupInput("variable3", "Occurences of column C :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0")),
           selectInput("numcars", "Number of Cars", choices = NULL)),
    column(3,
           tableOutput("data")),

    column(3,
           textOutput("result"))
  )
)

server <- function(input, output, session) {

  result <- 0

  df1 <- reactive({
    filter(data_test,
           (is.null(input$variable1) | A %in% input$variable1),
           (is.null(input$variable2) | B %in% input$variable2),
           (is.null(input$variable3) | C %in% input$variable3))
  })

  observe({
    updateSelectInput(session, "numcars", choices = c("All", unique(as.character(df1()[["NB_CARS"]]))))
  })

  output$result <- renderText({
    if (input$numcars == "All") {
      num_text <- nrow(df1())
    } else {
      num_text <- sum(df1()[["NB_CARS"]] == input$numcars)
    }
    paste("Number of occurences = ", num_text)
  })

  output$data <- renderTable({df1()})

}
...