在Shiny R中的selectInput中动态分组值

问题描述

我正在尝试创建一个简单的闪亮仪表板,以表格的形式显示值。为了以表格形式显示数据,我使用了select输入语句和renderDT()。请找到下面的代码。下面的代码只是我要执行的操作的一个示例。

    library(shiny)
    library(shinydashboard)
    library(shinyWidgets)
    library(dplyr)
    
    d <-
      data.frame(
        Product_Name = c(
          "Table","Chair","Bed","Table","Bed"
        ),Product_desc = c("X","X","Y","Z","Z"),Product_cat = c(1,2,3,4,5,6,9,7,6)
      )
    
    ui <- shinyUI(fluidPage(
      useShinydashboard(),tabPanel(
        "Plot",sidebarLayout(
          sidebarPanel(
            selectInput(
              "product_name","Product Name",choices = NULL,selected = FALSE,multiple = FALSE
            ),selectInput(
              "Category","Product Category",multiple = TRUE
            ),#width = 2,position = "bottom"),mainPanel(DT::DTOutput("table1"))
          
        )
      )
    ))
    
    server <- function(input,output,session) {
      
      updateSelectInput(
        session,"product_name",choices = unique(d$Product_Name)
      )
      
      observeEvent(input$product_name,{
        
        y <- input$product_name
        x <- d %>% select(Product_Name,Product_cat) %>% filter(Product_Name %in% y) %>% 
          select(Product_cat)
        
        updateSelectInput(
          session,"Category",choices = (x)
        )
w <- input$Category
    z <- d %>% filter(Product_Name %in% y,Product_cat %in% w)
    
    output$table1 <-
      DT::renderDT(z)
        
      })
    }
    
    shinyApp(ui,server)

特定产品将具有多个所属类别。用户选择他们需要查看的那些类别集。

现在我面临的问题是产品类别。我想动态地对某些类别进行分组。例如,如果用户不想查看产品表的类别1、4、9、3,而是希望查看产品表的分类类别(例如1-4)。如何在闪亮的应用程序中动态地实现这一目标?

我不想对源数据进行任何更改。此外,分组可能会因要使用该分组的每个用户而异。在数据集中进行预定义的分组是没有意义的。

因此,用户流程如下。

  1. 用户选择产品名称
  2. 根据产品名称,产品类别将显示在下拉框中。可以选择多个类别值。
  3. 一旦用户在下拉框中选择值,则表将显示在mainPanel()中。

例如。

  1. 让用户选择产品名称为“表格”
  2. 接下来,下拉列表中的“产品类别”选项将为1、4、9、3。
  3. 让用户选择值1和9。现在将显示具有产品名称为Table且属于类别1和9的值。

我的期望是“用户是否有能力在Shiny Application中动态地将类别分为1-9、1-4等?

请告诉我您的建议。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)