Filtre à colonnes multiples par valeur en utilisant un groupe de case à cocher

voix
0

Comment puis-je utiliser un groupe de cases à cocher pour filtrer plusieurs colonnes par valeur? Voir l'exemple ci-dessous: Je veux revenir que les lignes pour lesquelles les colonnes indiquées par le groupe de cases à cocher ont la valeur « oui ».

---
title: test
runtime: shiny
output: 
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
```

```{r}
checkboxGroupInput(checkGroup, label = h3(Checkbox group), 
choices = list(col1, col2))
```

```{r}
df <- data.frame(c(1,2,3),c(no,yes,yes),c(no,no,yes))
colnames(df)<-c(id,col1,col2)
```
```{r}
renderDataTable({
    df        
})
```

à-dire lors de la sélection « col1' , la sortie ne doit contenir que la ligne rangée # 2 et 3, lors de la sélection » col2' , la sortie doit être: ligne n ° 3, lors de la sélection à la fois « col1 » et « col2 », la sortie doit être: ligne n ° 2 et 3.

Je pourrais écrire une instruction if pour chaque variable mais je préfère ne pas (je 10 environ). Il doit certainement exister un meilleur moyen?

Créé 07/11/2018 à 20:15
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

C'est là que vous aurez besoin de développer une condition de filtre pour vos données basé sur des valeurs d'entrée. Je vais utiliser dplyrtoute la filter_atfonction pour vous montrer comment.

Celui-ci incorpore également des concepts réactifs utilisés dans brillant. Si vous n'êtes pas trop familier avec eux, je recommande de faire un peu de lecture.

---
title: "test"
runtime: shiny
output: 
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---

```{r setup, include=FALSE}
library(flexdashboard)
library(shiny)
library(dplyr)
```

```{r}
checkboxGroupInput("checkGroup", label = h3("Checkbox group"), 
choices = list("col1", "col2"))
```

```{r}
df <- data.frame("id" = c(1,2,3), "col1" = c("no","yes","yes"),"col2" = c("no","no","yes"))
```
```{r}
renderDataTable({
    filter_at(df, input$checkGroup, any_vars(. == "yes"))       
})
```

Au cours du dernier morceau de code est où vous devez utiliser filter_at, et puisque vous faites cela basé sur des entrées, il doit être au sein de la renderDataTablefonction réactive.

Ce que cela fait est:

  1. filtrer votre df
  2. les variables dans vos sélections de input$checkGroup(votre entrée de case à cocher)
  3. sélectionner toutes les variables de la sélection indiqué équivalentes à « oui ». (par exemple any_vars(. == "yes)). Le point est un espace réservé pour les variables indiquées dans les entrées que vous avez sélectionnés.
Créé 07/11/2018 à 20:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more