2017-04-03 107 views
0

我想在我的Rmarkdown中顯示一個在網絡間切換的基本Shiny dygraph。下面是數據的一個樣本:在Shiny應用中過濾xts對象

> 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 

如果我子集數據幀df其中network=1,我可以成功地呈現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對象:

enter image description here

是否有解決此問題的已知解決方法? 下面是內嵌閃亮應用程序的代碼:

```{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)) 
    }) 
} 
) 

``` 
+0

爲什麼要將整個數據幀轉換爲xts?看起來'data $ network'應該繼續是數字。 –

回答

0

應用dplyr功能xts對象被認定的問題,但也許還沒有得到解決。如果您的dygraph()函數與時間索引無關,那麼您可以簡單地使用coredata(),如filtered <- filter(coredata(data), network == intput$networkname)。在另一種情況下,您必須在xtsdata.frame之間來回轉換。