提问人:Ben_89 提问时间:10/8/2023 更新时间:10/8/2023 访问量:26
如何在 R 中使用 kableExtra 动态添加组行标签
How to dynamically add group row labels with kableExtra in R
问:
我有一个数据帧(下面的示例),我想使用 R 中的包将其放入 HTML 表中。我的一列 () 是一个分组变量,我想用它来在表中添加组行标签。我知道我可以使用 中的函数来做到这一点,但我想知道是否有某种方法可以动态地做到这一点。例如,我在示例数据集中有三个唯一的字符串值,我可以轻松调用三个函数并提供相应的索引(第一个值和平均值行)。但是,我可能并不总是有三个唯一的字符串(例如,有时我可能有两个、四个或五个),并且在我的真实数据集中,每个组的行数/观测值数会发生变化。由于我想使用它来生成报告,我希望有一个技巧可以以某种方式自动化此过程。谢谢。kableExtra
pos
pack_rows()
kableExtra
pos
pack_rows()
pos
library(tidyverse)
library(kableExtra)
set.seed(10)
name <- paste("Name", LETTERS[1:15])
var1 <- rep(rnorm(15, 100, 20))
var2 <- rep(rnorm(15, 100, 20))
var3 <- rep(rnorm(15, 100, 20))
var4 <- rep(rnorm(15, 100, 20))
pos <- c(rep("DEF", 5), rep("MID", 5), rep("FWD", 5))
df <- data.frame(name, var1, var2, var3, var4, pos)
agg_df <- bind_rows(
df,
df %>% group_by(pos) %>%
summarise_at(vars(var1:var4), mean) %>%
mutate(name = "mean")
) %>%
arrange(pos, name)
agg_df %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
fixed_thead = TRUE)
答:
2赞
stefan
10/8/2023
#1
一种选择是通过 使用或添加标题行。为此,我首先创建一个包含组和行以及组的列表。Reduce
purrr::reduce
pack_rows()
start
end
label
library(dplyr, warn = FALSE)
library(kableExtra)
row_groups <- agg_df |>
mutate(row = row_number()) |>
select(pos, row) |>
split(~pos) |>
lapply(\(x) {
data.frame(
label = unique(x$pos),
start = min(x$row),
end = max(x$row)
)
})
agg_df |>
select(-pos) |>
kbl() |>
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
fixed_thead = TRUE
) |>
Reduce(
\(x, y) pack_rows(x, y$label, y$start, y$end),
x = row_groups,
init = _
)
评论