我是R的初学者,正在开展一个小项目。有没有办法将两个过滤器应用于闪亮的数据框?我正在研究具有多个列的数据框,例如医学专家,城市等。专家专栏中有不同类型的专家(Ortho,Periodontist等)我试图在闪亮的仪表板上获得输出,以便我过滤城市和专家同时提供的数据。或者仪表板上的两个过滤器,我首先按城市过滤,然后应用专家过滤器。输出结果将为我提供该城市所有专家(正射,外围或其他)的列表。
这是我正在处理的示例代码。提前谢谢。
output$origin <- renderUI({
options <- sort(unique(city.df$specialist))
selectInput("city","Select Specialist",as.list(options))
答案 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>