Взаимно реактивные фильтры Shiny Flexdashboard - PullRequest
0 голосов
/ 27 марта 2019

Просто пытаюсь воссоздать функцию «Только релевантные значения», которую некоторые из вас могут знать из фильтров Таблицы ... но пытаюсь сделать это на гибкой панели управления RShiny.

По сути, у меня есть таблица конфети их компании ... Когда я выбираю компанию, я хочу видеть только варианты конфет этой компании.(Я уже знаю, как сделать это однонаправленной фильтрацией) ...

Что еще более важно, я также хочу, чтобы варианты компании реагировали, если бы я должен был выбрать определенный шоколад перед компанией ... для их вариантов, чтобы уменьшитьсоответственно.

enter image description here

Вот мой код:

---
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")

```

Очень признателен за любую помощь с этим ... или даже совето том, возможно ли это вообще.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

О боже, это заняло больше времени, чем я надеялся ... но я думаю, что я наконец-то достаточно близко подошел к тому, что хотел. Благодаря вашей помощи А.Сулиман.

ps, я добавил еще одну строку для шоколада 100Grand, чтобы он находился под Nestle и Mars ...

Вот полная Flexdashboard в качестве сущности

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

0 голосов
/ 27 марта 2019

Вот один из способов использования 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]
      )
    })



 ```
...