R数据集中的TextInput过滤器Shiny

时间:2018-05-23 00:12:56

标签: r regex filter shiny

我根据电影'在电影中创建了一个可视化图像。数据集。在数据集中,对于每部电影,都有一个属性plot_keywords(格式是谋杀|警察|侦探 - 用无空格分隔的5个单词)。我想为这个属性实现一个交互式过滤器而不管大写/大写字母 - 也就是说,当你输入“谋杀”时,例如,Shiny应该显示所有谋杀的电影'出现在plot_keywords属性的任何部分。在我的代码中,如果用户未在过滤器框中输入任何内容(默认情况下),则会显示所有电影。在' else'之后我应该使用什么功能?

部分UI代码

ui <- fluidPage(
fluidRow(
column(3,
    wellPanel(
      textInput("plot", "I want to watch movie about...",NULL)
      )),

服务器代码的一部分

server <- function(input, output) {
p <- input$plot
m <- movies %>%
filter(
  if(p != NULL) && (p != "")
    {plot_keywords == movies$plot_keywords}
  else
)`

1 个答案:

答案 0 :(得分:1)

一个想法如下所示。这也允许用户键入多个单词进行搜索。即,当用户键入CrocODile Ii时,电影Crocodile Dundee II也会出现。我们使用的grepl函数有一个参数ignore.case,以确保我们的查询不区分大小写。

希望这有帮助!

enter image description here

library(shiny)
library(ggplot2movies)
library(dplyr)

ui <- fluidPage(
  textInput("plot", "I want to watch movie about...",NULL),
  dataTableOutput('my_data')
)

server <- function(input, output) {
  output$my_data <- renderDataTable({
    p <- input$plot
    if(p != '')
      movies %>% filter(Reduce(`&`, lapply(strsplit(p,' ')[[1]], grepl, title,ignore.case=T)))
    else
      movies
  })
}

shinyApp(ui,server)