简体   繁体   English

R Shiny应用程序中的外部滤波器

[英]External Filters in R Shiny Application

I have the following table (left many of the combinations out for brevity): 我有下表(为简便起见,省略了许多组合):

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

Where a1, b1, and c1, were created from the vectors 其中从向量创建a1,b1和c1

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

I want to create a Shiny table exactly like the one in the link https://shiny.rstudio.com/gallery/basic-datatable.html except for one issue. 除了一个问题外,我想创建一个与链接https://shiny.rstudio.com/gallery/basic-datatable.html中的表完全相同的Shiny表。 In that example the filters are actually columns in the table whereas I want to be able to choose "a1" and "c1" and get only the ones with a1 and c1. 在该示例中,过滤器实际上是表中的列,而我希望能够选择“ a1”和“ c1”并仅获取具有a1和c1的过滤器。 I essentially want to be able to use the vectors shown to find strings in the name column that contain the values I select. 我本质上希望能够使用显示的向量在名称列中查找包含我选择的值的字符串。 Does anyone know how to do this? 有谁知道如何做到这一点? All the examples I have found use filters that are already columns in the table. 我发现的所有示例都使用表中已为列的过滤器。

Here's a solution based on your example data. 这是一个基于您的示例数据的解决方案。 You can change the filtering conditions by changing the logic inside filter() function. 您可以通过更改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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM