使用复选框组按值过滤多列

时间:2018-11-07 20:15:19

标签: r checkbox shiny

如何使用复选框组按值过滤几列? 请参见下面的示例:我只想返回复选框组所指示的列的值为“是”的行。

---
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        
})
```

即,当选择“ col1”时,输出应仅包含第2行和第3行, 选择“ col2”时,输出应为:row#3, 同时选择“ col1”和“ col2”时,输出应为:row#2和3。

我可以为每个变量写一个if语句,但我不愿意(我有10个左右)。当然必须有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这是您需要根据输入值为数据开发过滤条件的地方。我将使用dplyr中的任何filter_at函数来向您展示如何使用。

这也包含了一些用于光泽的反应性概念。如果您对它们不太熟悉,我建议您做些阅读。

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

在最后一个代码块中,您将使用filter_at,并且由于您是根据输入来执行此操作的,因此它必须位于renderDataTable反应函数之内。

这是什么:

  1. 过滤您的df
  2. input$checkGroup中选择的变量中(您的复选框输入)
  3. 从指示的选择中选择等效于“是”的任何变量。 (例如any_vars(. == "yes))。点是所选输入中指示的变量的占位符。