使用向量的值作为Flexdashboard的输入

时间:2019-04-04 15:08:16

标签: r shiny r-markdown flexdashboard

我正在使用shinyflexdashboard编写一个交互式文档,并希望从向量(或列)中选择值作为输入来过滤数据集。考虑下面的示例:

---
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中找到一个示例。

1 个答案:

答案 0 :(得分:1)

您可以编辑下拉框的设置以允许进行多项选择。

selectInput("ncyl",
        label = "Value of cyl:",
        choices = mtcars %>% .$cyl %>% unique %>% sort,
        multiple = T)

您还需要根据所选内容现在是列表而非值的事实来编辑服务器代码。

mtcars %>%
    dplyr::filter(cyl%in%input$ncyl) %>%