首页 > 解决方案 > 将日期过滤器添加到 Flexdashboard

问题描述

我希望用户能够选择他们感兴趣的数据的日期范围。这是我第一次使用 flexdashboard 和 Rshiny,如果这是一个简单的问题,请原谅。我了解用户输入要求您使用反应式表达...

我尝试搜索 stackoverflow 一段时间,但仍然找不到帮助我的答案。这是我到目前为止编写的代码。

---
title: "title"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
    theme: lumen
    runtime: shiny
---
library(flexdashboard)
library(dplyr)
library(lubridate)
setwd("...")
data = readxl::read_excel("Resignation Data.xlsx")
Column {.sidebar}
-----------------------------------------------------------------------

Please choose the date range of interest.

```{r}
DateSeq = seq(as.Date("2020-07-13"), Sys.Date(), "day")
dateRangeInput("dateRange", "Date Select", format = "yyyy-mm-dd", start=min(DateSeq), end=max(DateSeq))
Row {data-width=150}
-----------------------------------------------------------------------

### ESS Utilization this month

```{r}
data_filter = renderTable({
    x = data[data$`Termination Date` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] | 
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (HR)` >= input$dateRange[1] |
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (ESS)` >= input$dateRange[1], ]
  })

renderGauge({
  utilization = round(length(which(!is.na(data_filter()$`Termination Initiation Date (ESS)`))) / length(data_filter()$`Employee ID`) * 100, 1)
  gauge(utilization, min = 0, max = 100, gaugeSectors(success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
  })

这会导致警告:$ 中的错误:$ 运算符对原子向量无效。并且仪表没有填充。

我无法理解如何访问反应函数中的过滤数据。我尝试使用基于此 stackoverflow 响应的 data_filter()$ Returning a dataframe in a reactive function in R Shiny Dashboard。谢谢您的帮助。

标签: rshinyflexdashboard

解决方案


正如@stefan 已经在评论中指出的那样,您只能访问反应式表达式中的反应式数据。

似乎问题在于它utilization仍然是“反应性的”,但是您在调用gauge.

在没有看到您的整个仪表板和数据的情况下,我建议您打gaugerenderGauge电话。

renderGauge({
  gauge(utilization, min = 0, max = 100, gaugeSectors(
    success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
})

另请参阅此处

要在 Shiny flexdashboard 中包含仪表,您需要确保将仪表输出包装在 renderGauge 中(以便在输入时更新它取决于更改)。

这行得通吗?


推荐阅读