如何使用复选框组按值过滤几列? 请参见下面的示例:我只想返回复选框组所指示的列的值为“是”的行。
---
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个左右)。当然必须有更好的方法吗?
答案 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
反应函数之内。
这是什么:
df
input$checkGroup
中选择的变量中(您的复选框输入)any_vars(. == "yes))
。点是所选输入中指示的变量的占位符。