I am trying to build an app using Shiny. It will contain 2 dropdowns, one will show the name of 7 different sectors- it,bank,steel,fmcg etc. The other dropdown should contain list of name of companiesof selected sector, i.e list of names will be dynamic.
1.I am not getting any idea about how to change list of names of 2nd dropdown dynamically, for eg. if we select "IT" 2nd dropdown should contain "infosys" ,"tcs" etc, if we select "Bank", 2nd dropdown musr show "SBI","ICICI" etc.
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Forecasting of stock prices and their accuracies"),
sidebarLayout(
sidebarPanel(
radioButtons("rd",
label="Select time range for training dataset",
choices=list("23 month","18 month","12 month","6 month"),
selected="23 months"),
selectInput("sector",
label="select a sector",choices=list("IT"=1,"Bank"=2,"Power"=3,"Steel"=4,
"FMCG"=5,"Infrastructure"=6,"Automobile"=7 ),
selected=1),
selectInput("stock",
label="select a option",choices=list("co.1"=1,"co.2"=2,
"co.3"=3,"co.4"=4,"co.5"=5,"
co.6"=6,"co.7"=7,"co.8"=8),
selected=1)
),
mainPanel("Display results",
textOutput("summary"),
tableOutput("view"))
)
))
server.R
shinyServer(function(input, output) {
datasetInput <- reactive({
if(input$sector=="1"){
switch(input$stock,
"1" = Infy,
"2" = TCS,
"3" = Wipro,
"4" = TechM)}
else if(input$sector=="2"){
switch(input$stock,
"1" = SBIN,
"2" = ICICI,
"3" = HDFC,
"4" = Axis,
"5" = IDBI,
"6" = PSB,
"7" = BOI,
"8" = Bob
)}
})
output$view<-renderTable({
head(datasetInput(),n=10)
})
})
If your data is in a data.frame
with variables to represent industry and stock, you could use renderUI
to dynamically create the second selectInput
.
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Forecasting of stock prices and their accuracies"),
sidebarLayout(
sidebarPanel(
radioButtons("rd",
label="Select time range for training dataset",
choices=list("23 month","18 month","12 month","6 month"),
selected="23 months"),
uiOutput("Box1"),
uiOutput("Box2")
),
mainPanel("Display results",
tableOutput("view"))
)
))
server.R
library(shiny)
biz = data.frame(
Sector = c("a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "b", "b"),
Stock = c("Infy","TCS","Wipro","TechM","SBIN","ICICI","HDFC", "Axis", "IDBI", "PSB","BOI","Bob"),
stringsAsFactors = FALSE
)
shinyServer(function(input, output) {
output$Box1 = renderUI(selectInput("sector","select a sector",c(unique(biz$Sector),"pick one"),"pick one"))
output$Box2 = renderUI(
if (is.null(input$sector) || input$sector == "pick one"){return()
}else selectInput("stock",
"Select a stock",
c(unique(biz$Stock[which(biz$Sector == input$sector)]),"pick one"),
"pick one")
)
subdata1 = reactive(biz[which(biz$Sector == input$sector),])
subdata2 = reactive(subdata1()[which(subdata1()$Stock == input$stock),])
output$view = renderTable({
if(is.null(input$sector) || is.null(input$stock)){return()
} else if (input$sector == "pick one" || input$stock == "pick one"){return()
} else return(subdata2())
})
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With