Несколько uiOutput с двумя фильтрами - PullRequest
0 голосов
/ 30 марта 2020

У меня блестящее приложение, которое имеет три вкладки:

1-я вкладка: импорт данных 2-я вкладка: динамическая c блок-схема на основе выбранного значения в столбце (id) 3-я вкладка: динамическая c блокпост на основе выбранного диапазона дат (date столбец)

Мое приложение работает нормально. Тем не менее, я хотел бы добавить еще одну функцию на мою вторую вкладку, которая является диапазоном дат. Итак, я хочу иметь два фильтра на моей второй вкладке. Например, я сначала выбираю id A, а после этого я выбираю диапазон дат и др aws коробочный график. Я включил пример данных.

df <- data.frame("date" = c("2020-01-01", "2020-01-01", "2020-01-02", "2020-01-02", "2020-01-03"), "id" = c("A", "A", "B", "B", "C"), "number" = c(1, 3, 2, 5, 4))

write.csv(df, "df.csv", row.names = F)

library(shiny)
library(dplyr)
library(ggplot2)

if (interactive()) {
  ui <- fluidPage(
    tabsetPanel(
      tabPanel("Import Data", fileInput("file", "Upload Your File:")),

      # How do I add one more uiOutput here?
      tabPanel("Number By Table", uiOutput("ids"), plotOutput("plot1")),  
      tabPanel("Number By Date", uiOutput("daterange"), plotOutput("plot2"))
)
)       

  server <- function(input, output, session) {
    df <- reactive({
      req(input$file)
      inFile <- input$file
      read.csv(inFile$datapath, stringsAsFactors = F)
    })

    output$ids <- renderUI({
      selectizeInput("id",
                     "Select Your ID:", 
                     choices = sort(unique(df()$id)))
    })

    output$daterange <- renderUI({
      dates <- as.Date(df()$date)
      dateRangeInput("daterange", "Select the date range:",
                     start = min(dates), end = max(dates),
                     min = min(dates), max = max(dates)
      )
    })

    output$plot1 <- renderPlot({
      dfplot1 <- filter(df(), df()$id == input$id)
      # I tried the below code, but it doesn't work
      # dfplot1 <- subset(dfplot1, date >= input$daterange[1] & date <= input$daterange[2])

      g1 <- ggplot(dfplot1, aes(date, number)) +
        geom_boxplot()
      print(g1)


      output$plot2 <- renderPlot({
      dfplot2 <- subset(df(), date >= input$daterange[1] & date <= input$daterange[2])

      g2 <- ggplot(dfplot2, aes(id, number)) +
        geom_boxplot()
      print(g2)
      })
    })
  }

  shinyApp(ui = ui, server = server)
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...