首页 > 解决方案 > 如何在没有用户输入的情况下过滤、选择和交互反应数据框?Shiny、Rmarkdown 和 Flexdashboard

问题描述

几天以来,我在选择或过滤反应性数据框时遇到了问题,所有这些都是在 Rmarkdown、Flexdashboard 和 Shiny 中开发仪表板的背景下。

数据框是以下类型的 Web 服务:

www.somewebpage.com/project1/service.py?parameter1=2020&parameter2=ABC

用户选择参数(parameter1parameter2)并按下按钮以执行对 Web 服务的调用,返回一个 JSON,我随后将其转换为数据框。

现在我的问题是。

我有一个反应式数据框,它不仅仅是一个数据框,它是一个函数,我如何从反应式数据框中过滤或选择变量,但只在代码中,没有任何用户输入?

下面是我如何创建反应式数据框的示例代码。

myData <- reactive({
        input$params # Action Button
        
        serv <- "www.somewebpage.com/project1/service.py?parameter1=2020&parameter2=ABC"
        dataURL <- isolate(urltools::param_set(urls = serv, key = "parameter1", value = input$parameter1))
        dataURL <- isolate(urltools::param_set(urls = dataURL, key = "parameter2", value = input$parameter2))
        resp <- httr::GET(dataURL)
        jsonRespText <- httr::content(resp, as = "text")
        jsonRespParsed <- httr::content(resp, as="parsed")
        df_json <- jsonlite::fromJSON(jsonRespText)
        modJson <- jsonRespParsed$Data
        
        dfCol <- modJson %>% bind_rows %>% dplyr::select(var1,
                                                         var2, var3, var4, var5, var6, var7, var8)  
})

在上面提供的代码中,我展示了如何创建名为"myData".

如何从"myData"对象中过滤或选择变量?

例如,我只想显示"myData"数据表中的一些变量:

renderDT({
  A <-  DT::datatable(data = myData() , extensions = "Buttons", 
                      options = list(
                        columnDefs = list(list(className = 'dt-center', targets = c(2,3,4))), 
                        pageLength = 10,
                        searchHighlight = TRUE, 
                        language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json'),
                        buttons = list("copy", "print", list(
                          extend = "collection",
                          buttons = c("csv","excel","pdf"),
                          text = "Descargar"
                        )),
                        dom = "Bftip"
                      ))
  A
})

我得到的是图像中显示的,我只想显示一些变量,而不是全部。

数据表输出

如果您需要我提供更多信息,我会保持警惕。

非常感谢。

已编辑

部分解决!

仍在研究如何过滤反应性数据框,但要选择,只需指定我在代码中显示的列。

renderDT({
  A <-  DT::datatable(data = myData()[,c(2,3,4)]) # Selecting columns 2, 3 and 4.
  A
})

标签: rdplyrshinyr-markdownflexdashboard

解决方案


推荐阅读