【发布时间】:2016-12-12 13:01:49
【问题描述】:
我有一个运行良好的闪亮应用,但我想改进它并添加一些功能。
我的数据如下:
NITG <- c("L447", "G24M", "G112", "F144", "B33D", "M4A1", "G432", "K54N", "K312", "K24K")
RC <- c("7E", "8E", "7D", "2G", "2B", "1D", "2J", "7M", "4H", "1D")
Pheno <- c("ZZ", "SS", "ZE", "ZZ", "ZZ", "ZLMN", "BB", "ZA", "GG", "ZZ")
GRADES <- c("D", "C", "D", "D", "C", "A", "D", "D", "D", "D")
data <- data.frame(NITG, RC, Pheno, GRADES)
我想要的是:
当我为我的变量选择一种模式时,例如让我们为 NITG 取“L447”,我想在 RC 变量过滤器中只显示“7E”的 RC,而不是我在数据中得到的所有 RC,“ZZ " 对于 Pheno 变量 ...等 我想要类似于 Excel 过滤器的东西。也许我需要一些反应性功能,我现在被卡住了。
感谢帮助
ui <- fluidPage(
titlePanel("Referentiel Renault Nissan"),
sidebarLayout(
sidebarPanel(selectInput("nitg",
"NITG:",
c("All", unique(filtered_df$NITG)),
selected = "All",
multiple = TRUE),
selectInput("pheno",
"Phenomenon:",
c("All", unique(filtered_df$Pheno)),
selected = "All",
multiple = TRUE),
selectInput("rc",
"RC:",
c("All", unique(filtered_df$RC)),
selected = "All",
multiple = TRUE),
selectInput("grade",
"Grades:",
c("All", unique(filtered_df$GRADES)),
selected = "All",
multiple = TRUE)
),
mainPanel(
DT::dataTableOutput("tableprint")
)
)
)
server <- function(input, output, session) {
output$tableprint <- DT::renderDataTable({
# Data
NITG <- c("L447", "G24M", "G112", "F144", "B33D", "M4A1", "G432", "K54N", "K312", "K24K")
RC <- c("7E", "8E", "7D", "2G", "2B", "1D", "2J", "7M", "4H", "1D")
Pheno <- c("ZZ", "SS", "ZE", "ZZ", "ZZ", "ZLMN", "BB", "ZA", "GG", "ZZ")
GRADES <- c("D", "C", "D", "D", "C", "A", "D", "D", "D", "D")
df <- data.frame(NITG, RC, Pheno, GRADES)
# Create filters based on inputs
f1 <- if("All" %in% input$nitg){
df$NITG
} else {
input$nitg
}
f2 <- if("All" %in% input$pheno){
df$Pheno
} else {
input$pheno
}
f3 <- if("All" %in% input$rc){
df$RC
} else {
input$rc
}
f4 <- if("All" %in% input$grade){
df$GRADES
} else {
input$grade
}
# Filter data
filtered_df <- filter(df,
NITG %in% f1,
Pheno %in% f2,
RC %in% f3,
GRADES %in% f4)
# Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input.
updateSelectInput(session, "nitg", choices = c("All", filtered_df$NITG), selected = input$nitg)
updateSelectInput(session, "pheno", choices = c("All", filtered_df$Pheno), selected = input$pheno)
updateSelectInput(session, "rc", choices = c("All", filtered_df$RC), selected = input$rc)
updateSelectInput(session, "grade", choices = c("All", filtered_df$GRADES), selected = input$grade)
datatable(filtered_df)
})
}
# Run the application
shinyApp(ui = ui, server = server)
【问题讨论】: