我根据电影'在电影中创建了一个可视化图像。数据集。在数据集中,对于每部电影,都有一个属性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
)`
答案 0 :(得分:1)
一个想法如下所示。这也允许用户键入多个单词进行搜索。即,当用户键入CrocODile Ii
时,电影Crocodile Dundee II
也会出现。我们使用的grepl
函数有一个参数ignore.case
,以确保我们的查询不区分大小写。
希望这有帮助!
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)