通过按钮/一键过滤数据表(R Flexdashboard)

时间:2018-10-23 09:07:49

标签: r datatables flexdashboard

我正在Flexdashboard中使用DT :: datatable来提供约100个不同国家的每月KPI。其中有五个仪表板用户特别感兴趣,因此,我正在寻找一种可以轻松筛选这些国家/地区的解决方案。

我的想法是在“导出按钮”旁边生成一个按钮,该按钮将仅过滤这五行上的数据。再次单击它可以最完美地再次显示原始表。 我发现可以指定custom buttons,但仍然不知道如何解决此问题。

这是到目前为止我得到的表的一个小例子:

# Random Data Frame
df <- data.frame(Country = paste("Country", 1:100, sep = "_"), 
                 Revenue = rnorm(n = 100, mean = 5000, sd = 2000))

# Data Table used in Dashboard
datatable(df, class = "hover", rownames = FALSE , extensions = 'Buttons', options = list(
  pageLength = 5,
  responsive = TRUE,
  dom = 'Bftip',
  buttons = c('copy', 'csv'),
  columnDefs = list(list(className = 'dt-center', targets = "_all"))
)) %>% formatCurrency(columns = "Revenue")

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

以下是Shiny中可重现的示例,因为我认为您要执行的操作在静态文档中不可行。我假设您设置了runtime: shiny

library(DT)
library(shiny)

countries <- data.frame(
  cns = LETTERS,
  value = runif(26, 1, 4)
)

TOP5 <- c("A", "B", "X", "Y", "Z")

ui <- fluidPage(
  actionButton("filter", "Filter countries of interest"),
  DTOutput("table")
)

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

  output$table <- renderDT({

    sel <- if(input$filter %% 2 == 0) countries$cns else TOP5

    countries %>% 
      filter(cns %in% sel) %>% 
      datatable()
  })

}

shinyApp(ui, server)

答案 1 :(得分:0)

我会使用SELECT SUM(CASE WHEN(date_difference>=3) THEN 1 ELSE 0 END) OVER (PARTITION BY customer_id ORDER BY date) FROM df sqlContext.sql(qry).show() 文件中嵌入的shinyApp

在您的YAML(首要事项)中,您需要设置:flexdashboard

您的关键代码段是:

在用户界面中下拉选择代码

runtime: shiny您可以将团队指定为五个感兴趣的国家/地区。

Choices

下载按钮

在服务器端,该逻辑仅用于下载经过过滤的数据。

  # Input: Choose dataset ----
  selectInput("dataset", "Choose a Country",
              choices = as.character(unique(df$Country)))
  

反应组件   这很重要,因为它允许根据用户的输入选择来动态过滤数据。

  # Button
  downloadButton("downloadData", "Download")

最后,您可以下载过滤的数据

  # Reactive value for selected dataset ----
  datasetInput <- reactive({
      df %>% filter(Country ==input$dataset)
  })

  

有用的链接

Shiny App Example

Using Shiny in Flex Dashboards

完整* .Rmd代码如下

  # Downloadable csv of selected dataset ----
  output$downloadData <- downloadHandler(
    filename = function() {
      paste(as.character(input$dataset), ".csv", sep = "")
    },
    content = function(file) {
      write.csv(datasetInput(), file, row.names = FALSE)
    }