[英]Shiny Dashboard
我是R的初学者,正在从事一个小项目。 有没有一种方法可以将两个过滤器应用于闪亮的数据帧? 我正在处理具有多个列的数据框,例如医学专家,城市等。在专家列中有不同类型的专家(Ortho,Periodontist等),我试图在闪亮的仪表板上获得输出,以便进行过滤同时由城市和专家提供数据。 或仪表板上的两个过滤器,这样我首先按城市过滤,然后应用专家过滤器。 输出将为我提供该城市中所有专家的列表(ortho,perio或其他)。
这是我正在处理的示例代码。 提前致谢。
output$origin <- renderUI({
options <- sort(unique(city.df$specialist))
selectInput("city","Select Specialist",as.list(options))
我不确定您要实现什么。
根据两个或多个选定的输入来切片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)
如果我错过了任何事情,请编辑或扩展您的帖子,然后我将相应地修改回复。
您可以执行两个选择,最简单的是:
使用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})
大概在理想的世界中,您需要UI能够首先允许通过两个变量中的任何一个进行选择,然后将后续变量的下拉列表限制为第一个子集返回的值的范围吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.