闪亮的仪表板

时间:2016-12-18 03:11:01

标签: r shiny

我是R的初学者,正在开展一个小项目。有没有办法将两个过滤器应用于闪亮的数据框?我正在研究具有多个列的数据框,例如医学专家,城市等。专家专栏中有不同类型的专家(Ortho,Periodontist等)我试图在闪亮的仪表板上获得输出,以便我过滤城市和专家同时提供的数据。或者仪表板上的两个过滤器,我首先按城市过滤,然后应用专家过滤器。输出结果将为我提供该城市所有专家(正射,外围或其他)的列表。

这是我正在处理的示例代码。提前谢谢。

output$origin <- renderUI({
    options <- sort(unique(city.df$specialist))
    selectInput("city","Select Specialist",as.list(options))

3 个答案:

答案 0 :(得分:1)

我不完全确定你想要达到的目标。

根据两个或多个选定的输入切片data.frame相当简单。

另一方面,在你的代码片段中,你引用了闪亮的函数renderUI,它用于服务器端函数。这是闪亮的最有趣的方面之一,但再加上反应性最难掌握的新手之一。

这是一个简单的例子(故意在格式化方面保持简单等)而没有renderUI

library(shiny)

city <- c('London','Tokio','New York')
specialist <- c('ortho', 'perio','gyne', 'rhino')
df <- expand.grid(city = city, specialist = specialist)

opt_specialist <- sort(unique(df$specialist))
opt_city <- sort(unique(df$city))

ui <- fluidPage(
  selectInput("spec","Select Specialist",opt_specialist),
  selectInput("city","Select City",opt_city),
  verbatimTextOutput('city_'),
  verbatimTextOutput('spec_')

)

server <- function(input, output, session) {

  output$city_ <- renderText({input$city})
  output$spec_ <- renderText({input$spec})

}

shinyApp(ui = ui, server = server)  

以下示例使用服务器端编程。使用它本身没有多大意义,除非与更复杂的服务器端操作结合使用。

library(shiny)

city <- c('London','Tokio','New York')
specialist <- c('ortho', 'perio','gyne', 'rhino')
df <- expand.grid(city = city, specialist = specialist)
opt_specialist <- sort(unique(df$specialist))
opt_city <- sort(unique(df$city))

ui <- fluidPage(
  uiOutput("origin"),
  verbatimTextOutput('city_'),
  verbatimTextOutput('spec_')

)

server <- function(input, output, session) {

  output$origin <- renderUI({

    list(
    selectInput("spec","Select Specialist",opt_specialist),
    selectInput("city","Select City",opt_city)
    )
  })

  output$city_ <- renderText({input$city})
  output$spec_ <- renderText({input$spec})

}

shinyApp(ui = ui, server = server)

如果我遗漏了任何内容,请编辑或延长您的帖子,我会相应地修改回复。

答案 1 :(得分:1)

您可以选择两种方法,最简单的方法:

使用DT包并在表格中对其进行过滤:

iris2 = iris[c(1:10, 51:60, 101:110), ]
datatable(iris2, filter = 'top', options = list(
  pageLength = 5, autoWidth = TRUE
))

来自DT网站的示例:https://rstudio.github.io/DT/

或者您必须创建两个selectInput小部件,其中包含对您的表的选择,然后在server.R中过滤您的数据集:

data_filt <- reactive({
        if (input$select1 != "..."){
        data <- data[data$column1 %in% input$select1,]
        }
        if (input$select2 != "..."){
        data <- data[data$column2 %in% input$column2,]
        }
data})

答案 2 :(得分:0)

据推测,在一个理想的世界中,你需要UI能够允许首先通过两个变量中的任何一个进行选择,然后将后续变量的下拉列表限制为第一个子集返回的值的范围? / p>