在闪亮的应用程序中过滤 xts 对象
Filtering xts objects in Shiny apps
我想在我的 Rmarkdown 中显示一个基本的 Shiny dygraph,它可以在网络之间切换。这是数据示例:
> head(df)
nightTrips dayTrips network
2014-05-03 0 16 1
2014-05-04 0 5 1
2014-05-05 0 8 1
2014-05-06 0 3 1
2014-05-07 0 0 1
2014-05-08 0 3 1
> nrow(df)
[1] 2239
如果我在 network=1
处对数据帧 df
进行子集化,我可以成功地为单个网络渲染一个 dygraph:
> head(test)
nightTrips dayTrips
2014-05-03 0 16
2014-05-04 0 5
2014-05-05 0 8
2014-05-06 0 3
2014-05-07 0 0
2014-05-08 0 3
dygraph(test, main = "Network1") %>%
dySeries("nightTrips", label = "Night Trips") %>%
dySeries("dayTrips", label = "dayTrips") %>%
dyOptions(stackedGraph = FALSE) %>%
dyRangeSelector(height = 20)
但是当我将我的数据绑定到一个数据帧中时,添加一个额外的列 netowrk
指定网络,将其转换为 xts 对象,并尝试启动一个闪亮的服务器 - 我得到一个过滤器的错误不能应用于 xts 对象:
这个问题有已知的解决方法吗?
这是内联 Shiny 应用程序的代码:
```{r, echo = FALSE}
shinyApp(
ui = fluidPage(
titlePanel("Sample Timeseries"),
sidebarLayout(
sidebarPanel(
uiOutput("networknames")
),
mainPanel(
dygraphOutput("networksgraph"))
)
),
server = function(input, output) {
data <- df
data <- as_xts(data, date_col = day)
output$networksgraph <- renderDygraph({
if (is.null(input$networkname)) return (NULL)
filtered <- filter(data,
network == intput$networkname) %>%
dygraph()
})
output$networknames <- renderUI({
selectInput("networkname", "Select your Network",
choices = c(1,2,3))
})
}
)
```
已确定将 dplyr
函数应用于 xts
对象的问题,但可能尚未解决。如果您的 dygraph()
函数与时间索引无关,那么您可以像 filtered <- filter(coredata(data), network == intput$networkname)
中那样简单地使用 coredata()
。在另一种情况下,你必须在 xts
和 data.frame
之间来回转换。
我想在我的 Rmarkdown 中显示一个基本的 Shiny dygraph,它可以在网络之间切换。这是数据示例:
> head(df)
nightTrips dayTrips network
2014-05-03 0 16 1
2014-05-04 0 5 1
2014-05-05 0 8 1
2014-05-06 0 3 1
2014-05-07 0 0 1
2014-05-08 0 3 1
> nrow(df)
[1] 2239
如果我在 network=1
处对数据帧 df
进行子集化,我可以成功地为单个网络渲染一个 dygraph:
> head(test)
nightTrips dayTrips
2014-05-03 0 16
2014-05-04 0 5
2014-05-05 0 8
2014-05-06 0 3
2014-05-07 0 0
2014-05-08 0 3
dygraph(test, main = "Network1") %>%
dySeries("nightTrips", label = "Night Trips") %>%
dySeries("dayTrips", label = "dayTrips") %>%
dyOptions(stackedGraph = FALSE) %>%
dyRangeSelector(height = 20)
但是当我将我的数据绑定到一个数据帧中时,添加一个额外的列 netowrk
指定网络,将其转换为 xts 对象,并尝试启动一个闪亮的服务器 - 我得到一个过滤器的错误不能应用于 xts 对象:
这个问题有已知的解决方法吗? 这是内联 Shiny 应用程序的代码:
```{r, echo = FALSE}
shinyApp(
ui = fluidPage(
titlePanel("Sample Timeseries"),
sidebarLayout(
sidebarPanel(
uiOutput("networknames")
),
mainPanel(
dygraphOutput("networksgraph"))
)
),
server = function(input, output) {
data <- df
data <- as_xts(data, date_col = day)
output$networksgraph <- renderDygraph({
if (is.null(input$networkname)) return (NULL)
filtered <- filter(data,
network == intput$networkname) %>%
dygraph()
})
output$networknames <- renderUI({
selectInput("networkname", "Select your Network",
choices = c(1,2,3))
})
}
)
```
已确定将 dplyr
函数应用于 xts
对象的问题,但可能尚未解决。如果您的 dygraph()
函数与时间索引无关,那么您可以像 filtered <- filter(coredata(data), network == intput$networkname)
中那样简单地使用 coredata()
。在另一种情况下,你必须在 xts
和 data.frame
之间来回转换。