【发布时间】:2018-07-15 23:35:26
【问题描述】:
我刚开始使用 Shiny 并使用它来显示选定站点的风频输出(速度和方向)。
问题
每个数据集都有不同的日期范围,当用户选择不同的站点时,我似乎无法将这些可变日期范围返回到 UI 中的 dateRangeInput。
如果选择的日期超出所选数据集范围,Shiny 会出错并在各处显示红色文本。为了解决这个问题,我使用最小/最大范围来输入 dataRangeInput。
到目前为止我的代码示例
用户从 UI 'selectInput' 的下拉菜单中选择一个站点,这会创建变量 input/ID“df”。
我可以让任何事情发挥作用的唯一方法是使用特定数据集的日期范围将日期范围作为全局变量传递,但这实际上是一个手动过程:
创建一些示例数据(在实际数据中,日期为日期/时间格式):
library(shiny)
library(openair)
library(ggplot2)
date<- c("2017-01-01","2017-01-02","2017-01-03","2017-01-04")
ws<-c(rep(0:3,1))
SiteA <- data.frame(date,ws,stringsAsFactors = FALSE)
date<- c("2017-01-01","2017-01-02","2017-01-03","2017-01-04","2017-01-05", "2017-01-06")
ws<-c(rep(0:5,1))
SiteB <- data.frame(date,ws,stringsAsFactors = FALSE)
从数据中提取最小值和最大值(这是我需要帮助的地方):
# Date ranges currently fixed to SiteA (need this to be dynamic based on selection)
mystartdate <- as.character(format(as.Date(min(SiteA$date))),"yyyy-mm-dd")
myenddate <- as.character(format(as.Date(max(SiteA$date))),"yyyy-mm-dd")
然后将这些日期传递到 UI 中的日期范围:
ui <- fluidPage(
titlePanel("title"),
sidebarLayout(
sidebarPanel(
selectInput("df","Choose a Site:",
choices = c(
"Site A" = 'SiteA',
"Site B" = 'SiteB')
),
dateRangeInput("date", "Select the date range:",
start = mystartdate, # Start date of the selected df
end = myenddate, # End date of the selected df
min = mystartdate,
max = myenddate,
format = "yyyy-mm-dd")
),
mainPanel(
strong(paste("Frequency Distribution:")),
plotOutput("hist")
)
)
)
然后将日期范围作为输入传递以过滤图 input$date[1] 和 input$date[2]。
server <- function(input, output) {
df <- reactive({
x <- get(input$df)
})
output$hist <- renderPlot({
df <- df() # df is the user selected dataset
dfhist<- selectByDate(df, start = input$date[1], end = input$date[2])
ggplot(df, aes(df$ws)) +
geom_histogram(fill = "blue", bins = 50) +
labs(x="Wind Speed (m/s)", y="Count")
})
}
shinyApp(ui = ui, server = server)
我的问题:
如何从所选数据集(SiteA 或 SiteB)中提取最小/最大日期并将其返回到 dateRangeInput 单元格?
任何想法/指针将不胜感激。谢谢
【问题讨论】:
-
执行代码很复杂,因为它不是可重现的示例。
SiteA$date的对象怎么样? -
请检查此链接,为帮助您,我需要您的
SiteA对象how to make a reproducible example 的至少一个示例 -
谢谢,我添加了一些示例数据。为混乱道歉。不想让代码太长。但希望这会有所帮助。
-
好的。我会发布答案