pill_buttons()
我有一个包含大约 15 个感兴趣的变量的数据框,我的目标是使用包中的函数根据某些标准有条件地填充值reactablefmtr
。
下面的虚拟数据试图模拟我的真实数据,但为了写这篇文章,我只使用了 3 个变量,而不是 15 个左右。var1_z
等var2_z
是与其同名列相对应的 z 分数。然后,我创建了额外的列,引用了我希望在表格中为各个值着色的颜色。
library(tidyverse)
library(reactable)
library(reactablefmtr)
cell_bg <- function(x){
case_when(
x > 1.5 ~ "red",
x < -1.5 ~ "lightblue",
.default = "transparent"
)
}
set.seed(1)
ex <- data.frame(
date = seq(Sys.Date(), Sys.Date() - 9, -1),
var1 = round(rnorm(10, 8000, 500)),
var2 = round(rnorm(10, 500, 50)),
var3 = round(rnorm(10, 100, 20)),
var1_z = round(runif(10, -3, 3), 2),
var2_z = round(runif(10, -3, 3), 2),
var3_z = round(runif(10, -3, 3), 2)
) %>%
mutate(
across(
.cols = var1_z:var3_z,
.fns = cell_bg,
.names = "{.col}_pal"
)
)
我熟悉如何使用该pill_buttons()
函数,如下图所示,它在我的虚拟数据集上显示。但是,像下面这样为每个变量完成每个函数,以及为colDef(show = FALSE)
我不想在最终输出中显示的每一列编写代码,这既重复又乏味。我相信你能理解,对更多列重复这些步骤似乎有些过头了。
reactable(ex,
highlight = TRUE,
pagination = FALSE,
defaultColDef = colDef(
align = "center",
headerVAlign = "center",
html = TRUE
),
columns = list(
date = colDef(sticky = "left"),
var1 = colDef(cell = pill_buttons(ex, color_ref = "var1_z_pal")),
var2 = colDef(cell = pill_buttons(ex, color_ref = "var2_z_pal")),
var3 = colDef(cell = pill_buttons(ex, color_ref = "var3_z_pal")),
var1_z = colDef(show = FALSE),
var2_z = colDef(show = FALSE),
var3_z = colDef(show = FALSE),
var1_z_pal = colDef(show = FALSE),
var2_z_pal = colDef(show = FALSE),
var3_z_pal = colDef(show = FALSE)
)
)
我知道我可以使用其他表格包,例如kableExtra
可以简化我的工作流程,但我决定使用reactablefmtr
和pill_buttons()
函数,因为我喜欢它的美感。我希望有人能有一个解决方案,让我的代码更高效地创建所需的输出,而不必编写很多行代码。
下面是一个示例,其中每个
colDef(show = FALSE)
和每个都是colDef(cell = pill_buttons(...))
动态生成的,而无需为每个相关列写下来。这可以扩展到任意数量的列。我们
lapply
在这里使用它来生成一个包含不同的列表colDef
,并另外命名这些列表条目,使它们与相关的列名相匹配。结果:
数据: