Фильтр TextInput в наборе данных R Shiny - PullRequest
0 голосов
/ 23 мая 2018

Я создаю визуализацию в Shiny на основе набора данных 'movies'.В наборе данных, среди прочего, для каждого фильма есть атрибут plot_keywords (формат: убийство | криминал | полиция | человек | детектив - 5 слов, разделенных | без пробелов).Я хочу реализовать интерактивный фильтр для этого атрибута независимо от прописных / заглавных букв - то есть, например, когда вы вводите «Убийство», Shiny должен отображать все фильмы, где «убийство» присутствует в любой части атрибута plot_keywords.В моем коде, если пользователь ничего не вводит в поле фильтра (по умолчанию), отображаются все фильмы.Какую функцию я должен использовать после 'else'?

Часть кода пользовательского интерфейса

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 голосов
/ 23 мая 2018

Одна идея будет такой, как показано ниже.Это также позволяет пользователю вводить несколько слов для поиска.то есть, когда пользователь вводит 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...