在闪亮的应用程序中从 dygraph 中提取 dyRangeSelector 值
Extract dyRangeSelector values from dygraph in shiny app
我一直在使用 dygraphs 库在一个闪亮的应用程序中放置一些非常好的时间序列图。我特别喜欢将 dygraph
的 group
参数与 dyRangeSelector
结合使用,以同步多个 dygraphs 的缩放级别。
有没有办法让 other 闪亮的输出对用户对范围选择器的操作做出反应?以这个示例应用程序为例,它显示了一个简单的 dygraph 并在下面的 table 中对系列求和:
# app.R
library(shiny)
library(dygraphs)
library(dplyr)
indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]
ui <- fluidPage(
dygraphOutput("plot"),
tableOutput("table")
)
server <- shinyServer(function(input, output) {
output$plot <- renderDygraph({
indoConc %>%
dygraph %>%
dyRangeSelector
})
output$table <- renderTable({
indoConc %>%
filter(time >= min(indoConc$time), time <= max(indoConc$time)) %>%
summarise(total_conc = sum(conc))
})
})
shinyApp(ui, server)
我希望 table 仅在用户当前选择的时间间隔内求和。这意味着将 filter
行更改为使用那些 min/max 点以外的其他内容(这导致没有过滤)。
如何以适当的格式从范围选择器中提取这两个值,以便我可以在 filter
调用中使用它们,并在用户移动滑块时使 table 响应更新?
由于 dataframe
中的 time
变量是一个 3 位变量,我建议您将 datetime
对象转换为 character
然后 select 您需要的最后 3 位数字,并将其粗化为 numeric
以供进一步使用,如下所示:
rm(list = ls())
library(shiny)
library(dygraphs)
library(dplyr)
library(stringr)
indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]
takeLastnvalues <- -3
ui <- fluidPage(dygraphOutput("plot"),tableOutput("table"))
server <- shinyServer(function(input, output,session) {
values <- reactiveValues()
observeEvent(input$plot_date_window,{
value1 <- input$plot_date_window[[1]]
value2 <- input$plot_date_window[[2]]
value1 <- sub("Z", "", value1)
value2 <- sub("Z", "", value2)
value1 <- str_sub(value1,takeLastnvalues,-1)
value2 <- str_sub(value2,takeLastnvalues,-1)
values$v1 <- as.numeric(value1)
values$v2 <- as.numeric(value2)
})
output$plot <- renderDygraph({
indoConc %>%
dygraph %>%
dyRangeSelector
})
output$table <- renderTable({
indoConc %>%
filter(time >= min(values$v1), time <= max(values$v2)) %>%
summarise(total_conc = sum(conc))
})
})
shinyApp(ui, server)
我一直在使用 dygraphs 库在一个闪亮的应用程序中放置一些非常好的时间序列图。我特别喜欢将 dygraph
的 group
参数与 dyRangeSelector
结合使用,以同步多个 dygraphs 的缩放级别。
有没有办法让 other 闪亮的输出对用户对范围选择器的操作做出反应?以这个示例应用程序为例,它显示了一个简单的 dygraph 并在下面的 table 中对系列求和:
# app.R
library(shiny)
library(dygraphs)
library(dplyr)
indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]
ui <- fluidPage(
dygraphOutput("plot"),
tableOutput("table")
)
server <- shinyServer(function(input, output) {
output$plot <- renderDygraph({
indoConc %>%
dygraph %>%
dyRangeSelector
})
output$table <- renderTable({
indoConc %>%
filter(time >= min(indoConc$time), time <= max(indoConc$time)) %>%
summarise(total_conc = sum(conc))
})
})
shinyApp(ui, server)
我希望 table 仅在用户当前选择的时间间隔内求和。这意味着将 filter
行更改为使用那些 min/max 点以外的其他内容(这导致没有过滤)。
如何以适当的格式从范围选择器中提取这两个值,以便我可以在 filter
调用中使用它们,并在用户移动滑块时使 table 响应更新?
由于 dataframe
中的 time
变量是一个 3 位变量,我建议您将 datetime
对象转换为 character
然后 select 您需要的最后 3 位数字,并将其粗化为 numeric
以供进一步使用,如下所示:
rm(list = ls())
library(shiny)
library(dygraphs)
library(dplyr)
library(stringr)
indoConc <- Indometh[Indometh$Subject == 1, c("time", "conc")]
takeLastnvalues <- -3
ui <- fluidPage(dygraphOutput("plot"),tableOutput("table"))
server <- shinyServer(function(input, output,session) {
values <- reactiveValues()
observeEvent(input$plot_date_window,{
value1 <- input$plot_date_window[[1]]
value2 <- input$plot_date_window[[2]]
value1 <- sub("Z", "", value1)
value2 <- sub("Z", "", value2)
value1 <- str_sub(value1,takeLastnvalues,-1)
value2 <- str_sub(value2,takeLastnvalues,-1)
values$v1 <- as.numeric(value1)
values$v2 <- as.numeric(value2)
})
output$plot <- renderDygraph({
indoConc %>%
dygraph %>%
dyRangeSelector
})
output$table <- renderTable({
indoConc %>%
filter(time >= min(values$v1), time <= max(values$v2)) %>%
summarise(total_conc = sum(conc))
})
})
shinyApp(ui, server)