2016-08-24 94 views
0

我可以創建一個閃亮的數據表,顯示任何單個水牛的數據,但我無法弄清楚如何同時顯示所有水牛數據。任何幫助表示讚賞。閃亮的數據表使用過濾器顯示所有數據

樣本數據:

cleanbuffalo <- data.frame(name = c("queen","toni","pepper"), longitude = c(31.8,32,33), latitude = c(-24,-25,-26))

閃亮UI:

shinyUI(navbarPage("Buffalo Migration", id ="nav", 
    tabPanel("Data", 
    fluidRow(
     column(3, 
     selectInput("allnamesbuffalo", "Buffalo", c("All Buffalo" = "all buffalo", vars)) 
     ) 
    ), 
     hr(), 
     DT::dataTableOutput("buffalotable") 
    ) 
) 
) 

閃亮服務器:

shinyServer(function(input, output, session) { 
    observe({ 
    allnamesbuffalo <- if (is.null(input$allnamesbuffalo)) character(0) else  { 
      filter(cleanbuffalo, name %in% input$allnamesbuffalo) %>% 
     `$`('name') %>% 
     unique() %>% 
     sort() 
     } 
    }) 

    output$buffalotable <- DT::renderDataTable({ 
    df <- cleanbuffalo %>% 
     filter(
     cleanbuffalo$name == input$allnamesbuffalo, 
     is.null(input$allnamesbuffalo) | name %in% cleanbuffalo$name 
    ) 
     action <- DT::dataTableAjax(session,df) 

     DT::datatable(df, options = list(ajax = list(url = action)), 
        escape = FALSE) 
    }) 
}) 
+0

想法是,當用戶選擇'all buffalo'時,name變量應該包含所有水牛名稱的列表,否則它只包含那個特定的水牛名稱。您可以在過濾器之前使用if/else來計算'names'變量。 –

+0

你介意讓自己更具體一些嗎?我認爲我需要根據用戶選擇使用if/else命名變量更新。但是,當我嘗試更改名稱變量以包含所有水牛選擇中的所有水牛名稱時,我都會收到錯誤。謝謝你的幫助。 – josh453

回答

1

這裏是一個工作示例。請注意,我在您的數據框中添加了stringsAsFactors=F,否則您需要使用levels(cleanbuffalo$name)來獲取名稱。

library(shiny) 
library(dplyr) 

cleanbuffalo <- data.frame(name = c("queen","toni","pepper"), 
          longitude = c(31.8,32,33), 
          latitude = c(-24,-25,-26), stringsAsFactors = F) 

ui <- shinyUI(fluidPage(

    titlePanel("Example"), 

    sidebarLayout(
    sidebarPanel(
     selectInput("allnamesbuffalo", "Buffalo", c("all", cleanbuffalo$name)) 
    ), 

    mainPanel(
     dataTableOutput("buffalotable") 
    ) 
) 
)) 

server <- shinyServer(function(input, output, session) { 

    output$buffalotable <- renderDataTable({ 
    names <- NULL 
    if (input$allnamesbuffalo == "all") { 
     names <- cleanbuffalo$name 
    } else { 
     names <- input$allnamesbuffalo 
    } 
    filter(cleanbuffalo, name %in% names) 
    }) 

}) 

shinyApp(ui = ui, server = server) 
+0

這對我來說非常合適,感謝您的幫助。我之前有一個粗略的理解,只是無法得到正確的if/else語句。 – josh453