繁体   English   中英

在闪亮的 DT 数据表中调整/更新过滤器选项以适应已应用的过滤器

[英]Adapt/update filter choices to already applied filters in shiny DT datatable

我正在使用包 DT 在 r 中显示一个表格。 当我在一列中应用过滤器时,其他列的过滤器选择不适应已过滤的表。 因此,在下面的示例中,如果您使用 4.3 ... 4.8 过滤 sepal.length,即使没有 sepal.length 介于 4.3 和 4.8 之间并且是“virginica”的条目,您仍然可以选择过滤物种“virginica”。 当您要过滤超过 100 个水平的因子列时,这尤其麻烦。

对于这个问题,已经有一个用 JavaScript 编写的解决方案。 请参阅此链接: https ://datatables.net/forums/discussion/27541/update-select-filters 和解决方案的现场演示: http ://live.datatables.net/xehimatu/1/edit 但是我不不知道如何以闪亮的方式实现这一点。

这是 Iris 数据集的一个小例子。

library(shiny)
library(DT)

ui <- fluidPage(
  fluidRow(column(12, DTOutput("table"))
  )
)

server <- function(input, output, session) {
  output$table <- renderDT({

    DT::datatable(iris, filter = "top")
  })
}

shinyApp(ui, server)


我如何调整 JavaScript 代码以使这个函数在 Shiny 中工作,以及我在哪里插入代码片段。

# function of the live demo in the link above

$(document).ready(function() {
  var table = $('#example').DataTable( {
    initComplete: function () {
      this.api().columns().every( function () {
        var column = this;
        var select = $('<select><option value=""></option></select>')
          .appendTo( $(column.footer()).empty() )
          .on( 'change', function () {
            var val = $.fn.dataTable.util.escapeRegex(
              $(this).val()
            );

            column
              .search( val ? '^'+val+'$' : '', true, false )
              .draw();
          } );

        column.data().unique().sort().each( function ( d, j ) {
          select.append( '<option value="'+d+'">'+d+'</option>' );
        } );
      } );
    }
  } );

  table.on('draw', function () {
    table.columns().indexes().each( function ( idx ) {
      var select = $(table.column( idx ).footer()).find('select');

      if ( select.val() === '' ) {
        select
          .empty()
          .append('<option value=""/>');

        table.column(idx, {search:'applied'}).data().unique().sort().each( function ( d, j ) {
          select.append( '<option value="'+d+'">'+d+'</option>' );
        } );
      }
    } );
  } );
} );

帮助将不胜感激。

我一直在为同样的问题苦苦挣扎很长时间。 这些文档帮助我实施了我的解决方案。

Github 问题: https : //github.com/rstudio/DT/issues/934

Rstudio 文档: https ://shiny.rstudio.com/articles/packaging-javascript.html

我发现以下示例具有其他功能(行详细信息)。 我将尝试遵循相同的逻辑(尽管我没有JS经验)。 如果您成功做到了,请告诉我们:

HTML和Javascript https://datatables.net/examples/api/row_details.html

相同但在R https://rstudio.github.io/DT/002-rowdetails.html中实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM