通过来自反应数据帧的selectinput选项来设置反应数据

时间:2018-02-20 16:27:21

标签: r shiny subset selectinputdate

我是新手,我想提出一个(理论上的)问题可能是错的,但无论如何,在搜索后我想知道。

您可以使用基于此数据框创建的selectinput()的值来对活动数据框进行子集化吗?这对我来说似乎是一个悖论,因为每次更新数据框时,selectinput()也会更新。我会用一个我想法的小例子来帮助别人理解。可能我要问的是天真但我想知道。

 location = c("100 ail","16th and Whitmore","40AB01 - ANTWERPEN","Abington") 
last = c("2018-02-01 09:30:00", "2018-02-01 03:00:00", "2017-03-07 10:00:00","2018-02-01 03:00:00") 
first = c("2015-09-01 00:00:00","2016-03-06 19:00:00","2016-11-22 15:00:00","2016-06-09 19:00:00") 
locations = data.frame(location, last, first)

library(shiny)
library(shinythemes)
library(htmltools)
library(DT)
library(utilr)
library(openair)
library(dplyr)
library(ropenaq)
library(worldmet)

  ui = fluidPage(theme = shinytheme("slate"),

  # title
  titlePanel("Select Dates of interest and location"),

  # first row; This allows a user to enter their start and stop dates
  fluidRow(
    column(3, wellPanel(

    )
    ),
    column(3, wellPanel(

    )
    ),
      column(
          width = 6

      )
  ),



  fluidRow(
      tabsetPanel(
          type = "tabs",
          # summary tab
          tabPanel(
              "  Select Dates and Location",
              uiOutput("loc"),
              uiOutput("dt"),
              shiny::dataTableOutput("merged")         

          ),                      

          # scenario tab.  Needs work.  Panel should include a summary of user choices (selected on previous panels) and then 
          # allow a user to enter their email address.  An action button would be pressed to create the output from OpenAir.
          tabPanel(
              "Selection Summary and Process Data",
              fluidRow(
                  # actionButton("goButton", "OpenAir Local!"),
                  # helpText("When you click the button above, you should see",
                  #          "the output below update to reflect the value you",
                  #          "entered at the top:"),

                  )


                  )
              )
          )
      )

#server.r
server = function(input, output, session) {
 #initial selectinput to create the initial dataframe
output$loc<-renderUI({
     selectInput("loc", label = h4("Choose location"),
                 choices = locations$location ,selected = 1
     )
   })

    rt<-reactive({
#dataframe creation
    AQ<- aq_measurements(location = input$loc) 
    )
    met <- importNOAA(year = 2014:2018)
    colnames(AQ)[9] <- "date"
    merged<-merge(AQ, met, by="date")

    merged$location <- gsub( " " , "+" , merged$location)
    merged


   })

#selectinput based on the dataframe
output$dt<-renderUI({
     selectInput("dt", label = h4("Choose Dates"), 
                 choices = as.character(rt()[,1]),
                 selected = 1,
                 multiple = T)
   })


#attempt to create a datatable by subseting the dataframe by the choices of selectinput   
   output$merged <- shiny::renderDataTable({
     a <- subset(rt(), rt()[,1] %in% input$dt)
   })
}
shinyApp(ui, server)

1 个答案:

答案 0 :(得分:0)

问题不同了。 Shiny无法读取日期时间之间的空格,因此我将其替换为“+”。

{{1}}