You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用中根据日期与班次选择动态更新selectInput(market)

解决方案:根据日期与班次动态更新市场选择框

要实现根据所选日期(周日/周二)和班次,动态更新market选择框的选项,只需在服务器端新增监听逻辑,同时响应日期和班次的变化,从df1中筛选出符合条件的市场名称即可。

修改后的完整代码

library(shiny)
library(shinythemes)
library(lubridate)

df1 <- structure(
  list(
    Marketname = c("Market1","Market1", "Market2","Market2", "Market3", "Market3"),
    Days = c("Sunday","Sunday","Sunday","Sunday", "Sunday","Tuesday"),
    Openinghours = c("Morning","Evening", "Morning","Evening","Evening","Evening")
  ), row.names = c(NA, 6L), class = "data.frame")

ui <- fluidPage(  
  shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                    br(),
                    tabPanel("",
                             sidebarLayout(
                               sidebarPanel(
                                 dateInput("date", "Which day shift do you choose?"),
                                 selectInput("hours", label = h5("Which work shift do you choose??"), choices = NULL, 
                                             selected = ""),
                                 selectInput("market", label = h5("Choose a market??"), choices = NULL, 
                                             selected = "")
                               ),
                               mainPanel(
                               )
                             ))
  ))

server <- function(input, output,session) {
  
  # 更新班次选择框
  observe({
    week_day <- wday(input$date, label = TRUE, abbr = FALSE)
    updateSelectInput(session, "hours", choices = unique(df1[df1$Days == week_day, 3]))
  })
  
  # 根据日期和班次更新市场选择框
  observe({
    req(input$date, input$hours)  # 确保日期和班次都已选择
    week_day <- wday(input$date, label = TRUE, abbr = FALSE)
    # 筛选符合日期和班次的市场
    available_markets <- unique(df1$Marketname[df1$Days == week_day & df1$Openinghours == input$hours])
    updateSelectInput(session, "market", choices = available_markets)
  })
}

shinyApp(ui = ui, server = server) 

关键逻辑说明

  • 新增的observe函数同时监听input$date和input$hours的变化,只要其中一个值改变,就会触发市场选择框的更新
  • 使用req()函数确保只有当日期和班次都被选择后,才执行筛选逻辑,避免空值报错
  • 通过df1$Days == week_day和df1$Openinghours == input$hours双重条件筛选,提取对应的Marketname并去重,作为market选择框的选项

内容的提问来源于stack exchange,提问作者Carlo Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:01:18