Добавьте оператор if или отфильтруйте оператор if в реактиве - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать блестящую панель / приложение, чтобы пользователь мог фильтровать данные по различным критериям.После применения фильтров пользователь мог выбрать, какие переменные он / она хочет видеть на гистограмме, а также отфильтрованный набор данных.

Для примера кода я хочу, чтобы пользователи могли фильтровать по местоположению,Уровни Атланта, Чикаго и Сиэтл.Однако я также хочу, чтобы пользователи могли фильтровать сразу по ВСЕМ городам по умолчанию.Все не является опцией в наборе данных, поэтому я хотел добавить опцию «Все».Таким образом, я хочу, чтобы люди фильтровали входные данные $ location_type! = "All", но я не могу заставить его работать.Ниже приведен мой код только с фильтром - если бы вы могли изменить его для работы filter_if, я был бы очень признателен!

library(tools)
library(dplyr)
library(shiny)
library(ggplot2)
ui <- fluidPage(
  sidebarLayout(
  sidebarPanel(

  selectInput(inputId = "x",
              label = "Predictor:",
              choices = c("ID", "location", "title", "job_sat", "motivation", "commitment", "review"),
              selected = "ID"),
  selectInput(inputId = "y",
              label = "Outcome:",
              choices = c("ID", "sales", "location", "title", "job_sat", "motivation", "commitment", "review"),
              selected = "sales"),
  textInput(inputId = "plot_title",
            label = "Plot Title:",
            placeholder = "Enter text for this plot's title"),
  selectInput(inputId = "location_type",
              label = "Location:",
              choices = c("All", levels(fakeshinydata$location)),
              selected = "All",
              multiple = TRUE)
),
mainPanel(
  plotOutput(outputId = "scatterplot")
)
)
)

server <- function(input, output) {


  fake_subset <- reactive({
    req(input$location_type)
    dplyr::filter(fakeshinydata, location %in% input$location_type)
   })

   pretty_plot_title <- reactive({toTitleCase(input$plot_title)})

  output$scatterplot <- renderPlot({
ggplot(data = fake_subset(),
       aes_string(x = input$x, y = input$y)) +
  geom_point() +
  labs(title = pretty_plot_title())
    })
}

 shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 30 ноября 2018

Вот что вам нужно -

fake_subset <- reactive({
  req(input$location_type)
  filter(fakeshinydata, (location %in% input$location_type) | (input$location_type == "All"))
})
...