我正在使用shiny
和flexdashboard
编写一个交互式文档,并希望从向量(或列)中选择值作为输入来过滤数据集。考虑下面的示例:
---
title: "Example"
runtime: shiny
theme: simplex
vertical_layout: fill
output:
flexdashboard::flex_dashboard:
orientation: rows
---
```{r setup, include=FALSE}
library(shiny)
library(tidyverse)
library(DT)
```
Sidebar {.sidebar}
======================
### Filtering options
```{r echo = FALSE}
selectInput("ncyl",
label = "Value of cyl:",
choices = mtcars %>% .$cyl %>% unique %>% sort,
selected = 20)
```
Explore
======================
Row
----------------------
### Table
```{r echo = FALSE}
DT::renderDataTable({
mtcars %>%
dplyr::filter(cyl==input$ncyl) %>%
dplyr::select(cyl, disp) %>%
dplyr::arrange(-disp) %>%
DT::datatable(options = list(
pageLength = 10,
bPaginate = TRUE,
scrollX = TRUE,
sScrollY = '75vh',
scrollCollapse = TRUE),
extensions = list("Scroller")
)})
```
在这种情况下,使用标签可以选择列cyl
的三个可能值之一来过滤数据集。
我想用许多 buttons 代替它,我可以在其中选择许多值进行选择(例如,在这种情况下,将有3个按钮,分别用于值4、6和8),以便使用所有或部分这些值进行过滤,但不一定只过滤其中一个。打算将其用于可能包含大量值的列,因此为此可能需要滚动条。
是否可以使用flexdashboard实现此目的?到目前为止,我还无法在Rmarkdown gallery中找到一个示例。
答案 0 :(得分:1)
您可以编辑下拉框的设置以允许进行多项选择。
selectInput("ncyl",
label = "Value of cyl:",
choices = mtcars %>% .$cyl %>% unique %>% sort,
multiple = T)
您还需要根据所选内容现在是列表而非值的事实来编辑服务器代码。
mtcars %>%
dplyr::filter(cyl%in%input$ncyl) %>%