Hello,
I am building a Shiny app with 2 tabs. The first tab contains 2 multi-select dropdown menus. The 2nd tab contains a table that is filtered/impacted by the selections of the 2 dropdowns from the previous tab. The first dropdown filters the table. The second dropdown is a little different: I want the selections in the 2nd dropdown to all populate in their respective column in the table on the 2nd tab. Further, I would like an additional row to be created for each additional selection beyond the 1st selection. For example, if I had a dataset like the following:
Col1 Col2 Col3
1 a Group1
2 a Group2
3 b Group3
4 b Group2
5 b Group3
6 b Group2
7 a Group2
Let's say the first dropdown filters Col2 and I only want to see values = a. Then, we have:
Col1 Col2 Col3
1 a Group1
2 a Group2
7 a Group2
Next, I want the 2nd dropdown to able to select any of Groups 1, 2, or 3 from Col3 regardless of what is left after the first filtering step. So, if I select Group 1 and Group 3 from the dropdown on the previous tab - I want the # of rows to double. So, it would essentially look like this:
Col1 Col2 Col3
1 a Group1
1 a Group3
2 a Group1
2 a Group3
7 a Group1
7 a Group3
Here is some example code I've started on:
#----- Load libraries -----#
library(shiny)
library(shinydashboard)
library(DT)
library(shinyWidgets)
library(dplyr)
library(rhandsontable)
# Define UI for application
ui <- fluidPage(
dashboardPage(
dashboardHeader(title="Draft"),
dashboardSidebar(
sidebarMenu(
menuItem("Filtering Questions",
tabName = "questions",
icon = icon('question')
),
menuItem("All Data",
tabName = "all_data",
icon=icon("table")
)
)
),
dashboardBody(
tabItems(
tabItem(
tabName = "questions",
selectInput(
inputId = 'q1',
label = '1.) Choose carb',
choices = unique(mtcars$carb),
selected = unique(mtcars$carb)[1],
multiple = TRUE
),
br(),
selectInput(
inputId = 'q2',
label = '2.) Choose gear',
choices = unique(mtcars$gear),
selected = unique(mtcars$gear)[1],
multiple = TRUE
)),
tabItem(
tabName = "all_data",
rHandsontableOutput("all_table")
)
))))
# Define server logic
server <- function(input, output) {
mtcars_filter = reactive({
filter = subset(mtcars,carb %in% input$q1)
#Add in value(s) selected for gear --> will create 1, 2, or 3 possible rows per indicator
return(filter)
})
#----------All Data Table----------#
output$all_table=renderRHandsontable({
my_table = rhandsontable(mtcars_filter()) %>%
hot_col(c(1:11), readOnly = TRUE) %>%
hot_context_menu(allowRowEdit = FALSE, allowColEdit = FALSE) %>%
hot_table(highlightCol = TRUE, highlightRow = TRUE)
return(my_table)
})
}
# Run the application
shinyApp(ui = ui, server = server)
How do I implement this logic to add rows based on the dropdown selections? Not sure how to incorporate this logic. Any help would be appreciated! Thank you!