R 在具有多个条目的数据表中搜索列

R 在具有多个条目的数据表中搜索列,r,filter,datatable,shiny,dt,R,Filter,Datatable,Shiny,Dt,我在R中有一个datatable,其中一列Keywords包含一些行的多个条目,用逗号分隔。我希望这些多个条目可以单独搜索。datatable的默认搜索功能将这些条目视为一个长的单个项目 例如,第2行的列关键字值为“Keyword1,Keyword2”。我希望用户能够搜索“关键字1”或“关键字2”,并找到第2行。目前,datatable中的默认搜索栏将此条目视为一个项目:“关键字1,关键字2”,并且仅允许用户将“关键字1,关键字2”作为一个联合项目进行搜索,而不是两个单独的值 这是一个小的、可重

我在R中有一个datatable,其中一列Keywords包含一些行的多个条目,用逗号分隔。我希望这些多个条目可以单独搜索。datatable的默认搜索功能将这些条目视为一个长的单个项目

例如,第2行的列关键字值为“Keyword1,Keyword2”。我希望用户能够搜索“关键字1”或“关键字2”,并找到第2行。目前,datatable中的默认搜索栏将此条目视为一个项目:“关键字1,关键字2”,并且仅允许用户将“关键字1,关键字2”作为一个联合项目进行搜索,而不是两个单独的值

这是一个小的、可重复的问题示例

library(shiny)
library(DT)

## Create an example dataset with 3 rows and 1 column
dat <- matrix(c("Keyword1", "Keyword1, Keyword2", "Keyword2"), nrow = 3, ncol = 1)
colnames(dat) <- "Keywords"
dat <- data.frame(dat)

ui <- shinyUI(
  DT::dataTableOutput('ex1')
)

server <- shinyServer(function(input, output) {
  output$ex1 <- DT::renderDataTable(
     DT::datatable(dat, filter = "top")
  )
})

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(DT)
##创建一个包含3行1列的示例数据集

dat也许你可以试试这样的东西:

keys <- c("Keyword1", "Keyword1, Keyword2", "Keyword2")
grepl(paste("Keyword1", collapse = "|"), keys)
#output
[1]  TRUE  TRUE FALSE

grepl(paste("Keyword2", collapse = "|"), keys)
#output
[1]  FALSE  TRUE  TRUE

也许你可以试试这样的东西:

keys <- c("Keyword1", "Keyword1, Keyword2", "Keyword2")
grepl(paste("Keyword1", collapse = "|"), keys)
#output
[1]  TRUE  TRUE FALSE

grepl(paste("Keyword2", collapse = "|"), keys)
#output
[1]  FALSE  TRUE  TRUE

也许您可以实现正则表达式搜索?将搜索项作为正则表达式(可能是固定的)传递,并尝试在
关键字中的任何位置查找匹配项。当我使用datatable时,它提供了默认情况下所需的行为,您能否提供一个最小的可复制示例。也许您可以实现正则表达式搜索?将搜索项作为正则表达式(可能是固定的)传递,并尝试在
关键字中的任何位置查找匹配项。
能否提供一个最小的可复制示例,当我使用datatable时,它会提供默认情况下所需的行为。您如何将其与DT::datatable中内置的搜索函数集成?再次阅读了主要问题,我意识到您希望DT::datatable中的搜索功能查找特定字符串。当我使用右上角的
搜索
选项而不是
过滤器
时,我可以只键入关键字1,它将过滤掉包含关键字1的行,同样,搜索中的关键字2将导致包含关键字2的行。问题是当您使用
filter
选项时。
filter
选项更像Excel中的选项,您只能根据每行中的值进行筛选。但是,
Search
选项在所有列中查找字符串。刚刚更新了解决方案。问题是您尝试搜索的列是一个筛选器。把它转换成一个字符就可以了。把它转换成一个字符的唯一问题是,现在用户必须事先知道并输入搜索词。他们不再像列是一个因子时那样看到可用选项的列表。除此之外,这种方法工作得很好。您如何将其与DT::datatable中内置的搜索功能集成?再次阅读您的主要问题后,我意识到您希望DT::datatable中的搜索功能查找特定字符串。当我使用右上角的
搜索
选项而不是
过滤器
时,我可以只键入关键字1,它将过滤掉包含关键字1的行,同样,搜索中的关键字2将导致包含关键字2的行。问题是当您使用
filter
选项时。
filter
选项更像Excel中的选项,您只能根据每行中的值进行筛选。但是,
Search
选项在所有列中查找字符串。刚刚更新了解决方案。问题是您尝试搜索的列是一个筛选器。把它转换成一个字符就可以了。把它转换成一个字符的唯一问题是,现在用户必须事先知道并输入搜索词。他们不再像列是一个因子时那样看到可用选项的列表。除此之外,这种方法效果很好
library(shiny)
library(DT)

## Create an example dataset with 3 rows and 1 column
dat <- matrix(c("Keyword1", "Keyword1, Keyword2", "Keyword2"), nrow = 3, ncol = 1)
colnames(dat) <- "Keywords"
dat <- data.frame(dat)
dat$Keywords <- as.character(dat$Keywords)

ui <- shinyUI(
  DT::dataTableOutput('ex1')
)

server <- shinyServer(function(input, output) {
  output$ex1 <- DT::renderDataTable(
    DT::datatable(dat, filter = "top")
  )
})

shinyApp(ui = ui, server = server)