标签: reactable

如何在没有 Shiny 的情况下过滤 Rmarkdown 中的预聚合数据?

原始问题

(请参阅下面的部分解决方案更新。)

我有一个 RMarkdown 文档,它按组总结了有多少记录(行)具有各种属性。我希望能够通过在汇总之前进行过滤来操作表中包含哪些记录。我在下面创建了一个最小但类似的模型。

我想要的是一个交互式复选框,可以有效地“注释或取消注释”

  # filter(weight_class == "Heavy") %>% 
Run Code Online (Sandbox Code Playgroud)

以下。

我知道我可以使用 Shiny 做到这一点,但我需要能够直接与同事共享生成的 HTML 文件(在我的情况下通过共享 Box 文件夹),因此 Shiny 解决方案不可行,至少目前是这样。DT另外,我考虑过使用/的功能datatable,但据我所知,过滤需要在它到达那里之前发生(尽管我愿意被证明我对此是错误的)。

我见过像htmltools、 、之类的包htmlwidgetscrosstalk它们似乎可以促进这一点,但我对它们还不够熟悉,并且似乎无法在网上找到足够接近的示例来根据我的目的进行修改。

实际上,我希望能够过滤多个条件,并希望从过滤后的数据生成多个表格和绘图,但我希望下面的最小示例可以作为一个可行的起点。

我如何添加这样的复选框(或类似的)来创建这种类型的交互性,而不需要求助于 Shiny?

演示 RMarkdown:

---
title: "Table Demo"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(DT)
```

```{r data}
set.seed(42)
df <- tibble(
  group = sample(paste0("Group ", LETTERS[1:4]), 100, replace = T),
  weight_class = sample(c("Heavy", "Light"), 100, replace = T, prob = c(.3, …
Run Code Online (Sandbox Code Playgroud)

r r-markdown crosstalk reactable

6
推荐指数
1
解决办法
1241
查看次数

如何使用反应式过滤父表和嵌套表中的行?

如何使用特定的行来过滤行Type,这些行位于父表或 a 的任何嵌套表中reactablecrosstalk::filter_checkbox如下所示

dat <- structure(list(Manufacturer = c(
  "Acura", "Acura", "Audi", "Audi",
  "BMW", "Buick", "Buick", "Buick", "Buick", "Cadillac", "Cadillac",
  "Chevrolet", "Chevrolet", "Chevrolet", "Chevrolet", "Chevrolet",
  "Chevrolet", "Chevrolet", "Chevrolet", "Chrysler", "Chrysler",
  "Chrysler", "Dodge", "Dodge", "Dodge", "Dodge", "Dodge", "Dodge",
  "Eagle", "Eagle", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford",
  "Ford", "Ford", "Geo", "Geo", "Honda", "Honda", "Honda", "Hyundai",
  "Hyundai", "Hyundai", "Hyundai", "Infiniti", "Lexus", "Lexus",
  "Lincoln", "Lincoln", "Mazda", "Mazda", "Mazda", "Mazda", "Mazda",
  "Mercedes-Benz", "Mercedes-Benz", "Mercury", "Mercury", "Mitsubishi",
  "Mitsubishi", "Nissan", …
Run Code Online (Sandbox Code Playgroud)

r htmlwidgets crosstalk reactable

5
推荐指数
1
解决办法
906
查看次数

使用 Reactable 和 Blogdown 进行条件格式化

使用 R 的Reactable包和 RMarkdown 我想创建一个表,其中列的状态 <= 2 为绿色方块,否则为红色方块。

如果我尝试根据状态列的值设置其格式,它会创建一个非彩色方块。参见图片。

在此输入图像描述

在下面的 .Rmd 文件中,仅当列没有值时,我才可以使用 css 在列中制作彩色方块。

总而言之,在“状态”列下,我想要没有可见数字的彩色方块(状态 <= 2 为绿色方块,否则为红色方块),与列的状态名称左对齐。

Flag 列只是为了显示 css 正在工作。

RMarkdown 文件

title: Conditional Colored Square in Reactable Table
author: IX
date: 'September 5, 2020'
slug: test
categories: []
tags: []
output: 
  html_document
---

```{css, echo=FALSE}
 .row {
    display : flex;
    align-items : center;
    margin-bottom: 15px;
  }
.box {
  height: 20px;
  width: 20px;
  border: 1px solid black;
  margin-right : 5px;
}

.red {
  background-color: red;
} …
Run Code Online (Sandbox Code Playgroud)

r r-markdown reactable

5
推荐指数
1
解决办法
951
查看次数

在可反应的可扩展行中使用图像

给定一个包含一列图像链接 ( <img src...>) 的数据框,是否可以使用 的reactable可扩展行功能来扩展行并查看图像?

这是一些基本数据:

library(tidyverse)
library(reachable)

img_df <- tribble(~image,
                  "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Kosaciec_szczecinkowaty_Iris_setosa.jpg/450px-Kosaciec_szczecinkowaty_Iris_setosa.jpg'/>",
        "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Iris_versicolor_3.jpg/320px-Iris_versicolor_3.jpg'/>",
        "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Iris_virginica.jpg/295px-Iris_virginica.jpg'/>"
)

iris %>%
  group_by(Species) %>%
  summarize(mean = mean(Sepal.Length)) %>%
  add_column(img_df) -> df

reactable(df)
Run Code Online (Sandbox Code Playgroud)

因此,它不会显示“图像”列,而是显示为可扩展列,并在行扩展时显示图像。

我可以使用此代码显示 HTML,但图像本身不会显示:

reactable(df,
          columns = list(
            image = colDef(html = TRUE,
                           resizable = TRUE,
                           show=F)
          ),
          details = function(index) {
            if(df$image[index] != "") {
              htmltools::HTML(df$image[index])
            }
          })
Run Code Online (Sandbox Code Playgroud)

我可以使用此代码显示图像,但它附带所有附加行信息。(这取自文档 [https://glin.github.io/reactable/articles/examples.html#expandable-row-details-1]

reactable(df, details = colDef(
  name = "More",
  details = JS("function(rowInfo) {
    return 'Details for row: ' …
Run Code Online (Sandbox Code Playgroud)

r reactable

5
推荐指数
1
解决办法
619
查看次数

可在 R markdown `asis` 块中进行反应,但不显示循环

我想在 R markdown 文档中创建动态部分。为此,我使用带有asis输出类型的 R 块。这些块包含由reactable包创建的表。

当我在 for 循环中创建表格时,我无法打印表格。我知道通常必须将绘图或类似内容包装print()在循环中,但这对我的情况没有影响。

我怎样才能打印表格?

---
title: "Test"
author: "Test"
date: "29 11 2021"
output: html_document
---

```{r include=FALSE}
library(reactable)

```

```{r results='asis', echo=FALSE}

cat("\n\n## My header 1 \n\n")

reactable(data.frame(test = rnorm(3)))  ## This works

```



```{r results='asis', echo=FALSE}



for (i in 1:3) {
  
  cat("\n\n## My header ", i+1, "\n\n")
  
  print(reactable(data.frame(test = rnorm(3))))  ## shows nothing
  
}

```
Run Code Online (Sandbox Code Playgroud)

r r-markdown reactable

5
推荐指数
1
解决办法
1010
查看次数

将默认过滤器设置为 R 中的可反应表

R 的 Reactable 包引入了自定义过滤列的功能。

可反应的自定义过滤

上面的链接有一些关于如何将下拉(选择)列表添加到特定列的很好的示例,但是我发现很难弄清楚如何在表加载时添加默认的过滤值。

请参阅下面的示例(从上述链接修改),我将如何加载表并包含按Manufacturer值过滤的列Acura

library(reactable); library(htmltools)

data <- MASS::Cars93[, c("Manufacturer", "Model", "Type", "Price")]

reactable(
  data,
  filterable = TRUE,
  columns = list(
    Manufacturer = colDef(
      filterInput = function(values, name) {
        tags$select(
          onchange = sprintf("Reactable.setFilter('cars-select', '%s', event.target.value)", name),
          lapply(unique(values), tags$option),
          style = "width: 100%; height: 28px;"
        )
      }
    )
  ),
  defaultPageSize = 5,
  elementId = "cars-select"
)
Run Code Online (Sandbox Code Playgroud)

r reactable

5
推荐指数
1
解决办法
698
查看次数

字符串中的“与”符号 (&amp;) 变为“&amp;” 在串扰filter_select()函数中

我在使用可反应表的 r闪亮应用程序的串扰 filter_select() 函数中使用 NFL 体育场名称。然而,当我选择“M&T Bank Stadium”时,它显示为“M&[amp;]T Bank Stadium”(我添加了括号,以便您看到它的样子)。有没有办法让串扰过滤器选择显示“M&T 银行体育场”而不是“M&[amp;]T 银行体育场”?

我在下面做了一个快速 MRE

library(reactable)
library(tidyverse)
library(crosstalk)
library(shiny)

df <- tibble(points = c(10, 12, 14), 
             stadium = c("M&T Bank Stadium", "Wembley Stadium", "FirstBank Stadium"))

df_crosstalk <- SharedData$new(df)

df_react <- 
  reactable(df_crosstalk)

ui <- fluidPage(
  titlePanel("Test Ampersand"),
  fluidRow(
    column(
      4,
      filter_select(
        id = "stadium",
        label = "Stadium",
        sharedData = df_crosstalk,
        group = ~`stadium`)
      ),
    column(
      8,
      df_react
    )
  )
)

server <- function(input, output, session) {
  output$table <- renderReactable({
    df_react
  })
} …
Run Code Online (Sandbox Code Playgroud)

r shiny crosstalk reactable

5
推荐指数
1
解决办法
199
查看次数

R 可反应_如何截断单元格内容并在悬停时显示?

我在表格中有一些长文本,将其显示为可反应的。我希望长文本被截断,并且仅在悬停在其顶部时才出现。到目前为止,我已经设法截断单元格中的文本,但我无法使悬停起作用。有什么帮助吗?

library(reactable)
library(tidyverse)

reactable(
      iris[1:5, ] %>% mutate(Species = 'This text is long and should only show up entirely when hovering'),
      columns = list(
        Species = colDef(
          html = TRUE,
          style = "
          white-space: nowrap;
          overflow: hidden;
          text-overflow: ellipsis;
          hover: visible")
          )
        )```
Run Code Online (Sandbox Code Playgroud)

html javascript r reactable

4
推荐指数
1
解决办法
1108
查看次数

Reactable R - 将每页最大行数从 10 更改为 5

我想将每页可反应的行数限制为 10 到 5。

这是一个可重现的示例

set.seed(250)
df <- tibble(x = sample(x = 1:20))
reactable(df)
Run Code Online (Sandbox Code Playgroud)

现在,当您运行此代码时,会出现两页,每页 10 行。我想要四页,每页 5 行。

r reactable

3
推荐指数
1
解决办法
1466
查看次数

将 Reactable 转换为 ggplot,这可能吗?

我目前在某些代码中将一个可反应的对象存储为对象。我希望能够将所述对象转换为 ggplot,但无论我做什么,我都会得到相同错误的变体。使用blastula的add_ggplot函数,我得到:

Error in UseMethod("grid.draw") : 
  no applicable method for 'grid.draw' applied to an object of class "c('reactable', 'htmlwidget')"
Run Code Online (Sandbox Code Playgroud)

使用 ggplotify 的 as.ggplot 函数,我得到:

Error in UseMethod("as.grob") : 
  no applicable method for 'as.grob' applied to an object of class "c('reactable', 'htmlwidget')"
Run Code Online (Sandbox Code Playgroud)

有人对如何达到预期结果有建议吗?

编辑:在回答一个问题时,我可能应该最初回答:可反应源自一个非常普通的数据帧。

df <- structure(list(Date = c("2019-02-09", "2019-02-09", "2019-02-09", 
"2019-02-09", "2019-02-09", "2019-02-09", "2020-02-09", "2020-02-09", 
"2020-02-09", "2020-02-09", "2021-02-09", "2021-02-09", "2021-02-09", 
"2021-02-09"), Type = c("HUF", "HAD", "WOK", "STR", "HUF", "HAD", 
"WOK", "STR", "HUF", "HAD", "WOK", "STR", "HUF", "HAD"), Value = c(12L, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 reactable

3
推荐指数
1
解决办法
438
查看次数

R 可反应分组列以编程方式

我在 R 中有这个数据集。我想用 R 包重新转换它。

dt <-
  data.table(
    month = seq(1, 12),
    aa_2019 = seq(1, 12),
    bb_2019 = seq(1, 12),
    
    aa_2020 = seq(1, 12),
    bb_2020 = seq(1, 12),
    
    aa_2021 = seq(1, 12),
    bb_2021 = seq(1, 12),
    
    aa_2022 = seq(1, 12),
    bb_2022 = seq(1, 12)
)
Run Code Online (Sandbox Code Playgroud)

所需的输出如下所示。有没有办法自动制作?想象一下从 1900 年到 2023 年的年份序列。

reactable(
  dt,
  columns = list(
    aa_2019 = colDef(name = "aa"),
    bb_2019 = colDef(name = "bb"),
    
    aa_2020 = colDef(name = "aa"),
    bb_2020 = colDef(name = "bb"),
    
    aa_2021 = colDef(name = "aa"), …
Run Code Online (Sandbox Code Playgroud)

r reactable

2
推荐指数
1
解决办法
48
查看次数

在反应中条件格式化多列

我已经为此苦苦挣扎了一段时间,但无法解决这个问题。

我想生成一个可反应的表格,但有条件地格式化带有背景阴影的每个(数字)列。我知道如何将其应用于列,只要我手动输入每个列的名称即可。但关键是该表可以有任意数量(可能很大)的列,所以我想自动将其应用于所有列。

重要的是,列代表不同尺度的不同变量,因此必须对每列单独应用格式。我想秘密是创建一个大的命名列表,即coldefs用其他列名称扩展该列表。

下面是一个只有一列的示例。我试图扩展这个,但是陷入了一片混乱,所以我不会在这里粘贴混乱的代码来迷惑任何人。非常感谢任何帮助。

library(reactable)

df <- mtcars
df$mpg[2] <- NA

# Colour map for conditional formatting
orange_pal <- function(x){
  if (!is.na(x)){
    rgb(colorRamp(c("#ffe4cc", "#ffb54d"))(x), maxColorValue = 255)
  } else {
    "#e9e9e9" #grey
  }
}

# function which returns background colour based on cell value (using colour map)
stylefunc <- function(value) {
  normalized <- (value - min(mtcars$mpg)) / (max(mtcars$mpg) - min(mtcars$mpg))
  color <- orange_pal(normalized)
  list(background = color)
}

# list giving column formatting (using style function)
coldefs <- list(mpg …
Run Code Online (Sandbox Code Playgroud)

r shiny reactable

1
推荐指数
1
解决办法
3008
查看次数

标签 统计

r ×12

reactable ×12

crosstalk ×3

r-markdown ×3

shiny ×2

ggplot2 ×1

html ×1

htmlwidgets ×1

javascript ×1