Я пытаюсь добавить опцию ALL в оба моих динамически связанных виджета selectInput, которые фильтруют график на главной панели.По сути, я хочу, чтобы пользователь выбирал Сервис, например, Online или Mail-Order, или все сервисы, и аналогично столбцу Prof.Los, я хочу, чтобы пользователь выбирал либо Profit, либо Loss, либо сумму обоих.
Я не уверен, как добавить эту дополнительную опцию, когда два входа динамически связаны.Итак, мой вопрос: как я могу включить опцию фильтрации моих данных по ВСЕМ переменным в обоих раскрывающихся меню?
Моя библиотека и данные:
library("shiny")
library("plotly")
library("tidyverse")
library("dplyr")
data <- data.frame(Services = c("Online","Online","Online","Online","Online","Online","Online","Online","Online", "Online","Online","Online","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Mail-order","Shop","Shop","Shop","Shop","Shop","Shop","Shop","Shop","Shop","Shop","Shop","Shop"),
Month = c("2013-01-01","2013-02-01","2013-03-01","2013-04-01","2013-05-01","2013-06-01","2013-07-01","2013-08-01","2013-09-01","2013-10-01","2013-11-01","2013-12-01","2013-01-01","2013-02-01","2013-03-01","2013-04-01","2013-05-01","2013-06-01","2013-07-01","2013-08-01","2013-09-01","2013-10-01","2013-11-01","2013-12-01","2013-01-01","2013-02-01","2013-03-01","2013-04-01","2013-05-01","2013-06-01","2013-07-01","2013-08-01","2013-09-01","2013-10-01","2013-11-01","2013-12-01"),
Sales = c(40,50,20,30,40,50,200,100,250,100, 120,130,40,80,20,30,30,50,400,100,150,100,75,50,100,50,700,30,40,50,100,120,220,100,75,150),
Prof.Los = c("Profit","Loss","Profit","Profit","Loss","Loss","Loss","Profit","Profit","Loss","Loss","Profit","Profit","Loss","Profit","Loss","Profit","Loss","Loss","Loss","Profit","Loss","Loss","Profit","Profit","Profit","Loss","Loss","Loss","Profit","Profit","Loss","Loss","Loss","Profit","Loss"))
Мой код:
UI
ui <- fluidPage(
# App title ----
titlePanel(h1("Analyser tool")),
# Sidebar layout with input and output definitions ----
sidebarLayout(
sidebarPanel(
# Input: Select service type ----
uiOutput("services"),
uiOutput("rev")
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Tabset w/ plot, summary, and table ----
tabsetPanel(type = "tabs",
tabPanel("Bar Chart", plotlyOutput("Plot", height = "450px"))
)
)
))
Сервер
server <- function(input, output) {
# Service analyser reactive dataset
output$services = renderUI({
selectInput("services",
"Select services:",
choices = unique(data$Services))
})
ServiceSub <- reactive({
data %>%
filter(Services == input$services)
})
output$rev = renderUI({
selectInput(inputId = "rev",
label = "Profit/loss",
choices = unique(ServiceSub()[,"Prof.Los"]),
selected = unique(ServiceSub()[,"Prof.Los"]))
})
RevSub <- reactive({
req(input$services)
filter(ServiceSub(), Prof.Los %in% input$rev)
})
output$Plot = renderPlotly({
# plotly code
plot_ly(RevSub(), x = ~Month, y = ~Sales, type = "bar")
})
}
# Create Shiny app ----
shinyApp(ui, server)