代码之家  ›  专栏  ›  技术社区  ›  firmo23

我可以通过选择来自反应性数据帧的输入选项来子集反应性数据帧吗?

  •  1
  • firmo23  · 技术社区  · 8 年前

    是否可以使用 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 回复  |  直到 4 年前
        1
  •  0
  •   firmo23    8 年前

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

     output$loc<-renderUI({
         selectInput("loc", label = h4("Choose location"),
                     choices = locations$location ,selected = 1
         )
       })
    
       rt<-reactive({
         locations$location <- gsub( " " , "+" , locations$location)
    
       AQ<- aq_measurements(location = input$loc,date_from = as.Date(as.POSIXct(subset(locations$firstUpdated,(locations[,1]==input$loc))
       ,format="%Y-%m-%d %H:%M:%S")) 
       , date_to = as.Date(as.POSIXct(subset(locations$lastUpdated,(locations[,1]==input$loc)),format="%Y-%m-%d %H:%M:%S")) 
       )
       met <- importNOAA(year = 2014:2018)
       colnames(AQ)[9] <- "date"
       merged<-merge(AQ, met, by="date")
       # date output -- reports user-selected state & stop dates in UI
       merged$location <- gsub( " " , "+" , merged$location)
       merged$date <- gsub( " " , "+" , merged$date)
       merged
    
    
       })
    
       output$dt<-renderUI({
         selectInput("dt", label = h4("Choose Dates"), 
                     choices = as.character(rt()[,1]),
                     selected = 1
                     )
       })
    
       #DT  
    
       output$merged <- shiny::renderDataTable({
    
    
         subset(rt(),(rt()[,1]==input$dt))
    
    
       })
    
    推荐文章