【问题标题】:Mutually reactive Shiny Flexdashboard filters相互反应的闪亮 Flexdashboard 过滤器
【发布时间】:2019-08-17 15:05:35
【问题描述】:

只是尝试重新创建某些人可能从 Tableau 过滤器中知道的“仅相关值”功能......但尝试在 RShiny flexdashboard 中执行此操作。

基本上,我有一张巧克力及其公司的表格...当我选择一家公司时,我只想查看该公司的巧克力选项。 (我已经知道如何进行这种单向过滤了)...

更重要的是,如果我要在公司之前选择特定的巧克力,我还希望公司选项做出反应......以便他们的选项相应减少。

这是我的代码:

---
title: "reactive test"
output: 
 flexdashboard::flex_dashboard
runtime: shiny
---

```{r}
library(tidyverse)
```



```{r}

candyData <- read.table(
    text = "Brand       Candy
    Nestle      100Grand
    Nestle      Butterfinger
    Nestle      Crunch
    Hershey's   KitKat
    Hershey's   Reeses
    Hershey's   Mounds
    Mars        Snickers
    Mars        Twix
    Mars        M&Ms",
    header = TRUE,
    stringsAsFactors = FALSE)

```


Sidebar {.sidebar}
---

```{r}

radioButtons("brand",
            "brand:",
            choices = c("All", unique(candyData$Brand)),
            selected = "All")


radioButtons("candy_name",
            "candy_name:",
            choices = c("All", unique(candyData$Candy)),
            selected = "All")

```

非常感谢这方面的任何帮助......甚至是关于它是否可能的建议。

【问题讨论】:

    标签: r shiny flexdashboard


    【解决方案1】:

    这是使用shiny::updateRadioButtons 的一种方式。请注意,为了在我选择品牌后获得完整的品牌列表,我将All 添加到 candyData

    ```{r}
    
    candyData <- read.table(
      text = "Brand       Candy
    All All
        Nestle      100Grand
        Nestle      Butterfinger
        Nestle      Crunch
        Hershey's   KitKat
        Hershey's   Reeses
        Hershey's   Mounds
        Mars        Snickers
        Mars        Twix
        Mars        M&Ms
    ",
      header = TRUE,
      stringsAsFactors = FALSE)
    
    ```
    
    ```{r}
    
      radioButtons("brand",
                   "brand:",
                   #choices = c("All", unique(candyData$Brand)),
                   choices = unique(candyData$Brand),
                   selected = "All")
    
    
      radioButtons("candy_name",
                   "candy_name:",
                   choices = unique(candyData$Candy),
                   #choices = c("All", unique(candyData$Candy)),
                   selected = "All")
    
       observe({
          req(input$brand)
          x <- input$brand
          if(x=='All'){
            cho1 <- candyData %>% pull(Candy) %>% unique()
          } else{
            cho1 <- filter(candyData, Brand==x) %>% pull(Candy)
          }
    
          # Can also set the label and select items
          updateRadioButtons(session, "candy_name",
            label = paste("Options for", x,":"),
            choices = cho1,
            selected = cho1[1]
          )
        })
    
      observe({
          req(input$candy_name)
          y <- input$candy_name
          if(y=='All'){
            cho2 <- unique(candyData$Brand) %>% unique()
          } else{
            cho2 <- filter(candyData, Candy==y) %>% pull(Brand) 
            cho2 <- c(cho2,'All')
          }
    
          # Can also set the label and select items
          updateRadioButtons(session, "brand",
            choices = cho2,
            selected = cho2[1]
          )
        })
    
    
    
     ```
    

    【讨论】:

    • 您好 A. Suliman,非常感谢您的回复。对延迟回复您表示歉意。已经尝试过您的解决方案,我认为它非常接近。那里有很多我以前没有使用过的技术,所以会对其进行一些调查。基本上,当我点击巧克力棒时......公司的过滤是正确的......但我不需要将剩余的巧克力棒过滤到仅该公司......我将有一些明天有时间进一步调查。到时会更新帖子。谢谢
    • 再次嗨,已经创建了一个公开的画面,展示了我希望实现的功能...public.tableau.com/profile/julian.tagell#!/vizhome/…我仍在努力实现它...
    【解决方案2】:

    哦,天哪,这比我希望的要长... 但我想我终于得到了足够接近我所追求的东西。 感谢 A.Suliman 的帮助。

    ps,我为 100Grand 巧克力添加了另一行,这样它就在雀巢和玛氏下面...

    这里是完整的 flexdashboard 作为要点

    https://gist.github.com/jtag04/5e79dcf94886d46a5a1d045ffe53f789

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2020-08-18
      • 2019-05-20
      • 2020-04-11
      • 2021-10-13
      • 2021-05-25
      • 2018-05-16
      相关资源
      最近更新 更多