R 闪亮的过滤器更新不会显示变量的所有模式
我正在尝试构建一个可以过滤数据表的动态应用程序,我想要的是当我为我的第一个变量选择一个模式时,我的下一个过滤器将被更新,并且只针对我的第一个过滤器和第三个过滤器对应的模式 我从一个反应式应用程序开始,但它似乎不起作用,因为我必须始终保留“所有”选项,以显示其他模式,然后将其删除…有可能做到这一点吗? 因此,我决定添加一个操作按钮,但似乎无法很好地处理更新输入 我怎样才能修好它?谢谢 我的应用程序示例:R 闪亮的过滤器更新不会显示变量的所有模式,r,shiny,R,Shiny,我正在尝试构建一个可以过滤数据表的动态应用程序,我想要的是当我为我的第一个变量选择一个模式时,我的下一个过滤器将被更新,并且只针对我的第一个过滤器和第三个过滤器对应的模式 我从一个反应式应用程序开始,但它似乎不起作用,因为我必须始终保留“所有”选项,以显示其他模式,然后将其删除…有可能做到这一点吗? 因此,我决定添加一个操作按钮,但似乎无法很好地处理更新输入 我怎样才能修好它?谢谢 我的应用程序示例: library(shiny) library(dplyr) library(DT) ui &
library(shiny)
library(dplyr)
library(DT)
ui <- fluidPage(
titlePanel("Title"),
sidebarLayout(
sidebarPanel(width=3,
selectInput("filter1", "Filter 1", multiple = T, choices = c("All", LETTERS)),
selectInput("filter2", "Filter 2", multiple = T, choices = c("All", as.character(seq.int(1, length(letters), 1)))),
selectInput("filter3", "Filter 3", multiple = T, choices = c("All", letters)),
actionButton("goButton", "Go!"),
p(class = 'text-center', downloadButton('dl', 'Download Data'))
),
mainPanel(
DT::dataTableOutput("tableprint")
)
)
)
server <- function(input, output, session) {
output$tableprint <- DT::renderDataTable({
# Data
df <- tibble(LETTERS = rep(LETTERS, 2), Numbers = as.character(1:52),
letters = paste(LETTERS, Numbers, sep = ""))
df1 <- df
if("All" %in% input$filter1){
df1
} else if (length(input$filter1)){
df1 <- df1[which(df1$LETTERS %in% input$filter1),]
}
if("All" %in% input$filter2){
df1
} else if (length(input$filter2)){
df1 <- df1[which(df1$Numbers %in% input$filter2),]
}
if("All" %in% input$filter3){
df1
} else if (length(input$filter3)){
df1 <- df1[which(df1$letters %in% input$filter3),]
}
input$goButton
# Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input.
updateSelectInput(session, "filter1", choices = c("All", df$LETTERS), selected = input$filter1)
updateSelectInput(session, "filter2", choices = c("All", df1$Numbers), selected = input$filter2)
updateSelectInput(session, "filter3", choices = c("All", df1$letters), selected = input$filter3)
datatable(df1)
})
output$dl <- downloadHandler('mydata.csv', content = function(file) {
# Data
df <- tibble(LETTERS = rep(LETTERS, 2), Numbers = as.character(1:52),
letters = paste(LETTERS, Numbers, sep = ""))
df1 <- df
if("All" %in% input$filter1){
df1
} else if (length(input$filter1)){
df1 <- df1[which(df1$LETTERS %in% input$filter1),]
}
if("All" %in% input$filter2){
df1
} else if (length(input$filter2)){
df1 <- df1[which(df1$Numbers %in% input$filter2),]
}
if("All" %in% input$filter3){
df1
} else if (length(input$filter3)){
df1 <- df1[which(df1$letters %in% input$filter3),]
}
# Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input.
updateSelectInput(session, "filter1", choices = c("All", df$LETTERS), selected = input$filter1)
updateSelectInput(session, "filter2", choices = c("All", df1$Numbers), selected = input$filter2)
updateSelectInput(session, "filter3", choices = c("All", df1$letters), selected = input$filter3)
datatable(df1)
write.csv(df1, file)
})
}
# Run the application
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(dplyr)
图书馆(DT)
ui当我在Filter1
中选择A和B时,数据集是字母的子集,带有A
和B
。Filter2
中的选项是1,2,27,28
和Filter3
中的选项是A1、B2、A27、B28
。当我在Filter2
中选择1
时,Filter3
中的选项为A1
,当Filter2
中也选择了2
时,Filter3
将更新为A1
和A27
作为选项。您没有用于Filter2
和Filter3
的All
选项。这是你期待的吗
library(shiny)
library(dplyr)
library(DT)
ui <- fluidPage(
titlePanel("Title"),
sidebarLayout(
sidebarPanel(width=3,
selectInput("filter1", "Filter 1", multiple = TRUE, choices = c("All", LETTERS)),
selectInput("filter2", "Filter 2", multiple = TRUE, choices = c("All", as.character(seq.int(1, length(letters), 1)))),
selectInput("filter3", "Filter 3", multiple = TRUE, choices = c("All", letters)) ),
mainPanel(
DT::dataTableOutput("tableprint")
)
)
)
server <- function(input, output, session) {
output$tableprint <- DT::renderDataTable({
# Data
df <- tibble(LETTERS = rep(LETTERS, 2), Numbers = as.character(1:52),
letters = paste(LETTERS, Numbers, sep = ""))
df1 <- df
if("All" %in% input$filter1){
df1
} else if (length(input$filter1)){
df1 <- df1[which(df1$LETTERS %in% input$filter1),]
}
# Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input.
updateSelectInput(session, "filter1", choices = c("All", df$LETTERS), selected = input$filter1)
updateSelectInput(session, "filter2", choices = c("All", df1$Numbers), selected = input$filter2)
if("All" %in% input$filter2){
df1
} else if (length(input$filter2)){
df1 <- df1[which(df1$Numbers %in% input$filter2),]
}
updateSelectInput(session, "filter3", choices = c("All", df1$letters), selected = input$filter3)
if("All" %in% input$filter3){
df1
} else if (length(input$filter3)){
df1 <- df1[which(df1$letters %in% input$filter3),]
}
datatable(df1)
})
}
# Run the application
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(dplyr)
图书馆(DT)
ui不确定您想要什么:您的过滤器按预期更新在第一个过滤器中选择一个,然后尝试在第二个过滤器中选择两个模式,我无法修复它,我需要添加“全部”以选择这两个模式。当我选择1时,我不能选择27…所以只需将您的updateSelectInput
s移动到第一个过滤器之后和其他两个过滤器之前,这样df1仍将包含所有模式。但是添加过滤器是一项艰巨的任务,在第一个过滤器完成后,我会移动更新ElcTinputs,但我没有得到你的第二个建议?它是否能像预期的那样工作?谢谢,是的,这就是功能性,只是我想在过滤器上也有“所有”选项请,您知道如何删除DT::DataTable中编号行的第一列吗?在DataTable
函数中包括rownames=FALSE
datatable(df1,rownames=FALSE)
非常有用,我们花了2天时间找到了类似的解决方案,只是想知道,如果我们不想显示表,因此只想使用此功能更新过滤器值,我们如何才能实现同样的效果?