Gar*_*ary 9 r shiny shinydashboard
我有两个selectInput
s,我想在第一个(Brand)中选择更改第二个(Candy)中的可能选择.因此,例如,如果有人在第一个输入框中选择了"雀巢",那么只有雀巢糖果将出现在第二个框中.我的数据表有一个Brand列和一个Candy bar类型列.
我有以下代码开始,但这显示了所有选项,无论选择如何.
selectInput(inputId="brand",
label="Brand:",
choices=as.character
(unique(candyData$Brand)),
selected = "Nestle"
),
selectInput(inputId="candy",
label="Candy:",
choices=as.character
(unique(candyData$Candy)),
selected = "100Grand"
Run Code Online (Sandbox Code Playgroud)
数据集如下所示:
Brand Candy
Nestle 100Grand
Netle Butterfinger
Nestle Crunch
Hershey's KitKat
Hershey's Reeses
Hershey's Mounds
Mars Snickers
Mars Twix
Mars M&Ms
Run Code Online (Sandbox Code Playgroud)
更新的问题 如何根据后续过滤更新仪表板中的ValueBox?
output$count <- renderValueBox({
valueBox(
value = nrow(candyData),
subtitle = "Number of Candy Bars",
icon = icon("table")
)
})
Run Code Online (Sandbox Code Playgroud)
nru*_*ell 11
这是一种方法:
library(shiny)
library(shinydashboard)
##
ui <- shinyUI({
sidebarPanel(
htmlOutput("brand_selector"),
htmlOutput("candy_selector"))
})
##
server <- shinyServer(function(input, output) {
candyData <- read.table(
text = "Brand Candy
Nestle 100Grand
Netle Butterfinger
Nestle Crunch
Hershey's KitKat
Hershey's Reeses
Hershey's Mounds
Mars Snickers
Mars Twix
Mars M&Ms",
header = TRUE,
stringsAsFactors = FALSE)
output$brand_selector <- renderUI({
selectInput(
inputId = "brand",
label = "Brand:",
choices = as.character(unique(candyData$Brand)),
selected = "Nestle")
})
output$candy_selector <- renderUI({
available <- candyData[candyData$Brand == input$brand, "Candy"]
selectInput(
inputId = "candy",
label = "Candy:",
choices = unique(available),
selected = unique(available)[1])
})
})
##
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
更新:
您可以修改ui
定义
ui <- shinyUI({
sidebarPanel(
htmlOutput("brand_selector"),
htmlOutput("candy_selector"),
valueBoxOutput("count"))
})
Run Code Online (Sandbox Code Playgroud)
并将以下内容添加到server
:
output$count <- renderValueBox({
available <- candyData[candyData$Brand == input$brand, ]
valueBox(
value = nrow(available),
subtitle = sprintf("Number of %s Candy Bars", input$brand),
icon = icon("table"))
})
Run Code Online (Sandbox Code Playgroud)