Shiny - Использование диапазона дат из sliderInput в реактивном выражении dplyr, используемом для ggplot

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

Я хочу предоставить своим конечным пользователям возможность использовать ползунок для выбора диапазон дат для их анализа. Предыдущие вопросы по SO включают использование единственное значение для их ползунка вместо диапазона (например, эта почта). Следовательно, я не могу воспроизвести решение.

Ниже приведены пакеты и файл с моделированными данными, которые я использую. Есть 3 столбца: (а) Дата, (б) Запас, (в) Значение для определенного показателя.

library(shiny)
library(readxl)
library(dplyr)
library(ggplot2)
library(lubridate)

df <- data.frame(Date = c("30/09/2018", "30/06/2018", "31/03/2018", "31/12/2017", "30/09/2017", "30/06/2017",
                      "31/03/2017", "30/09/2018", "30/06/2018", "31/03/2018", "31/12/2017", "30/09/2017", "30/06/2017",
                      "31/03/2017"),
             Stock = c(rep("AAA", 7), rep("BBB", 7)),
             Value = c(5.1, 5.2, 5.6, 5.5, 5.6, 5.7, 5.6, 6.4, 6.9, 6.7, 7.2, 7.2, 7.2, 7.7))

df$Date <- as.Date(df$Date, format = "%d/%m/%Y")
df$Stock <- as.character(df$Stock)

Ниже приведен пользовательский интерфейс:

# Define UI for application
ui <- fluidPage(

  # Application title
  titlePanel("Stock Financials Trend"),

  # Sidebar with slider input to select date range
  sidebarLayout(
    sidebarPanel(
      selectInput("Stock_selector",
                  "Stock:",
                  c("AAA", "BBB")),

      # Add a Slider Input to select date range
      sliderInput("Date_range_selector", "Select Date Range",
                  min = 2017,
                  max = 2018,
                  value = c(2017, 2018))
    ),

    # Show a plot of the trend
    mainPanel(
      plotOutput("plot")
    )
  )
)

Сервер выглядит следующим образом:

server <- function(input, output) {

  filtered_df <- reactive({
    df %>%
      filter(Stock == input$Stock_selector & year(Date) == between(year(Date), input$Date_range_selector[1], input$Date_range_selector[2]))
  })

  output$plot <- renderPlot({
    ggplot(filtered_df(), aes_string(x = "Date", y = "Value")) + geom_line() + geom_point() +
  labs(title = paste(input$Stock_selector, "Trend", sep = " "), y = "Value")
  })    
}

# Run the application 
shinyApp(ui = ui, server = server)

Мой сценарий показывает, что фильтрация выполняется с использованием выражения dplyr, которое затем назначается реактивному выражению, которое впоследствии будет использоваться для построения графика с помощью ggplot.

Приведенный выше сценарий показывает пустой результат.

Я также попытался заменить значения numeric 2017 и 2018 в функции sliderInput на year(as.Date("2017", format = "%d/%m/%Y")), но вывод все равно не работает.

Желаемый результат выглядит примерно так (при условии, что выбран Stock AAA, а диапазон установлен от 2018 до 2018):

Shiny - Использование диапазона дат из sliderInput в реактивном выражении dplyr, используемом для ggplot

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 836
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо удалить year(Date) == в своем операторе фильтра, то есть изменить его на:

filtered_df <- reactive({
    df %>%
      filter(Stock == input$Stock_selector & between(year(Date), input$Date_range_selector[1], input$Date_range_selector[2]))
  })

Другие вопросы по теме