我有一个 RMarkdown 文档,它按组总结了有多少记录(行)具有各种属性。我希望能够通过在汇总之前进行过滤来操作表中包含哪些记录。我在下面创建了一个最小但类似的模型。
我想要的是一个交互式复选框,可以有效地“注释或取消注释”
# filter(weight_class == "Heavy") %>%
Run Code Online (Sandbox Code Playgroud)
以下。
我知道我可以使用 Shiny 做到这一点,但我需要能够直接与同事共享生成的 HTML 文件(在我的情况下通过共享 Box 文件夹),因此 Shiny 解决方案不可行,至少目前是这样。DT另外,我考虑过使用/的功能datatable,但据我所知,过滤需要在它到达那里之前发生(尽管我愿意被证明我对此是错误的)。
我见过像htmltools、 、之类的包htmlwidgets,crosstalk它们似乎可以促进这一点,但我对它们还不够熟悉,并且似乎无法在网上找到足够接近的示例来根据我的目的进行修改。
实际上,我希望能够过滤多个条件,并希望从过滤后的数据生成多个表格和绘图,但我希望下面的最小示例可以作为一个可行的起点。
我如何添加这样的复选框(或类似的)来创建这种类型的交互性,而不需要求助于 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) 如何使用特定的行来过滤行Type,这些行位于父表或 a 的任何嵌套表中reactable,crosstalk::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 的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) 给定一个包含一列图像链接 ( <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 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 的 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闪亮应用程序的串扰 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) 我在表格中有一些长文本,将其显示为可反应的。我希望长文本被截断,并且仅在悬停在其顶部时才出现。到目前为止,我已经设法截断单元格中的文本,但我无法使悬停起作用。有什么帮助吗?
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) 我想将每页可反应的行数限制为 10 到 5。
这是一个可重现的示例
set.seed(250)
df <- tibble(x = sample(x = 1:20))
reactable(df)
Run Code Online (Sandbox Code Playgroud)
现在,当您运行此代码时,会出现两页,每页 10 行。我想要四页,每页 5 行。
我目前在某些代码中将一个可反应的对象存储为对象。我希望能够将所述对象转换为 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 中有这个数据集。我想用 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) 我已经为此苦苦挣扎了一段时间,但无法解决这个问题。
我想生成一个可反应的表格,但有条件地格式化带有背景阴影的每个(数字)列。我知道如何将其应用于列,只要我手动输入每个列的名称即可。但关键是该表可以有任意数量(可能很大)的列,所以我想自动将其应用于所有列。
重要的是,列代表不同尺度的不同变量,因此必须对每列单独应用格式。我想秘密是创建一个大的命名列表,即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 ×12
reactable ×12
crosstalk ×3
r-markdown ×3
shiny ×2
ggplot2 ×1
html ×1
htmlwidgets ×1
javascript ×1