【问题标题】:Rshiny: Filter rows of Datatable text column by multiple user inputsR Shiny:通过多个用户输入过滤数据表文本列的行
【发布时间】:2019-10-11 00:23:03
【问题描述】:

我是 Shiny 的新手,想知道是否可以做点什么。 我想让用户输入文本搜索词并返回用户搜索词出现在描述中的数据框行。

由于我是新来的,我不确定描述我遇到的问题的最佳和最清晰的方式,因此如果需要,我可以添加更多信息。任何建议将不胜感激。谢谢。

【问题讨论】:

  • 为什么不直接使用datatable()(右上角)的搜索输入?另请参阅this
  • 感谢您的回复和推荐。搜索输入只允许我一次搜索一个值。我希望找到一种方法来搜索可能包含多个不同搜索词中的一个或多个的所有行,然后完全返回这些行?
  • 您可以搜索多个以空格分隔的项目。
  • 谢谢,我试过用这种方式搜索,但它只返回包含在搜索框中输入的所有值的行。如果我输入了计算机、音频和 mp3,我想返回包含至少 1 个这些术语的所有行。我仍然希望返回可能只包含音频和 mp3,但也不包含计算机的行。

标签: r regex shiny dt grepl


【解决方案1】:

您可以通过将选项search$regex 设置为TRUE,在搜索输入中使用正则表达式:

datatable(iris[c(1,2,51,52,101,102),], 
          options = 
            list(
              search = list(regex = TRUE)
            )
)

另一种解决方案(点击“返回”运行搜索):

js <- c(
  "function(settings){",
  "  var instance = settings.oInstance;",
  "  var table = instance.api();",
  "  var input = instance.parent().find('.dataTables_filter input');",
  "  input.off('keyup search input').on('keypress', function(e){",
  "    if(e.which == 13){",
  "      var keywords = input.val().split(' '), filter ='';",
  "      for(var i=0; i<keywords.length; i++){",
  "        filter = (filter !== '') ? filter + '|' + keywords[i] : keywords[i];",
  "      }",
  "      table.search(filter, true, false).draw();",
  "    }",
  "  });",
  "}"
)


datatable(iris[c(1,2,51,52,101,102),], 
          options = 
            list(initComplete = JS(js)
          )
)

【讨论】:

  • 这正是我所需要的,非常感谢您花时间解释它。
猜你喜欢
  • 2017-03-16
  • 2019-09-08
  • 2021-02-05
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2018-12-29
  • 2018-07-08
  • 2016-09-27
相关资源
最近更新 更多