Внешние фильтры в приложении R Shiny - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть следующая таблица (для краткости опущено множество комбинаций):

Name      r2     pvalue    t-statistic
a1
b1
c1
a1 & b1
a1 & c1
b1& c1
a1 & b1 & c1
....

Где a1, b1 и c1 были созданы из векторов

a = c("a1", "a2")
b = c("b1","b2","b3")
c = c("c1")

Я хочу создать блестящую таблицу точно так же, как в ссылке https://shiny.rstudio.com/gallery/basic-datatable.html, за исключением одной проблемы. В этом примере фильтры на самом деле являются столбцами в таблице, тогда как я хочу иметь возможность выбрать «a1» и «c1» и получить только те, которые имеют a1 и c1. По сути, я хочу использовать показанные векторы, чтобы найти строки в столбце имени, которые содержат выбранные значения. Кто-нибудь знает как это сделать? Все примеры, которые я нашел, используют фильтры, которые уже являются столбцами в таблице.

1 Ответ

0 голосов
/ 11 сентября 2018

Вот решение, основанное на данных вашего примера. Вы можете изменить условия фильтрации, изменив логику внутри функции filter ().

library(shiny)
library(dplyr)
library(data.table)

a = c("a1", "a2")
b = c("b1","b2","b3")
c = c("c1")

# Create dummy data
Name <- c("a1", "b1", "c1", "a1 & b1", "a1 & c1", "b1& c1", "a1 & b1 & c1")
# Random numbers
r2 <- runif(length(Name))
p.value <- runif(length(Name))
t.statistic <- runif(length(Name))

dummy.df <- cbind.data.frame(Name, r2, pvalue, t.statistic)

# Define UI
#ui <- fluidPage(
 # sidebarPanel(
  #  selectInput("a.list", "Select As", a),
   # selectInput("b.list", "Select Bs", b),
   # selectInput("c.list", "Select Cs", c)
  #),
  #mainPanel(
   # tableOutput("tab1"),
    #tableOutput("tab2")
  #)

    # Create a new Row in the UI for selectInputs
  fluidRow(
    column(4, selectInput("a.list", "Select As", a)
    ),
    column(4, selectInput("b.list", "Select Bs", b)
    ),
    column(4, selectInput("c.list", "Select Cs", c)
    )
  ),
  # Create a new row for the table.
  fluidRow(
    column(8, tableOutput("tab2"))
  )
)

# Define server logic
server <- function(input, output){
  # Table with all the data
  output$tab1 <- renderTable(dummy.df)

  # Apply filter to data
  foo <- reactive({
    dummy.df %>%
    filter(Name %like% input$a.list & Name %like% input$c.list)
  })

  # Table with filtered data - returns rows 5 and 7
  output$tab2 <- renderTable(foo())
}

# Create shiny app
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...