首页 > 解决方案 > R Shiny Datatable 的预过滤数据

问题描述

我正在编写一个应用程序,它允许人们查找帐户帐户并允许用户从两个选项中进行选择,在数据表中逐行进行。我想最终输出这些选择。

问题:

1)由于有很多数据被输入其中,我需要能够将数据过滤到与用户相关的内容。我想要每个唯一值的每一列的下拉列表。如果这是一个好方法,我该怎么做?先过滤数据,然后呈现表格会更好吗?

2)我需要以某种方式输出所做的选择。现在,我将只导出到 CSV 或 Excel 文件或其他文件。但是,我无法将输出折叠成我需要的“项目”。现在,输出将始终显示记录总数。我想我可以将输出过滤到其中包含值的单元格...

3)我认为一旦用户完成选择,我将需要一个提交/操作按钮来编写输出。

这是到目前为止我所拥有的一些模拟代码。我真的很感激任何帮助!

library(shiny)
library(DT)
library(datasets)

shinyApp(
  ui = fluidPage(
    title = 'Choices',
    DT::dataTableOutput('foo'),
    verbatimTextOutput('sel')
  ),
   server = function(input, output, session) {
    m1 <- iris[1:10,]
    name_pre <- "Item "
    name_suf <- seq(1:nrow(m1))
    rownames(m1) <- paste(name_pre, name_suf, sep ="")
    m2 <- matrix(as.character(1:2),nrow = nrow(m1), ncol = 2, byrow = TRUE)
    colnames(m2) <- c("Option A","Option B")
    rownames(m2) <- paste(name_pre, name_suf, sep ="")
    #Put radio buttons in the columns
    for (i in seq_len(nrow(m1))) {
      m2[i, ] = sprintf(
        '<input type="radio" name="%s" value="%s"/>',
        rownames(m2)[i], m2[i, ]
      )
    }
    m <- cbind(m1,m2)
    m
    output$foo = DT::renderDataTable(
      m, escape = FALSE,filter="top", selection = 'none', server = FALSE,
      options = list(dom = 't', paging = FALSE, ordering = FALSE),
      callback = JS("table.rows().every(function(i, tab, row) {
                    var $this = $(this.node());
                    $this.attr('id', this.data()[0]);
                    $this.addClass('shiny-input-radiogroup'); 
  });
                    Shiny.unbindAll(table.table().node());
                    Shiny.bindAll(table.table().node());")
    )
    output$sel = renderPrint({
      str(sapply(rownames(m), function(i) input[[i]]))
    })
    }
)

标签: javascriptrdatatablesshinydt

解决方案


推荐阅读