You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Quarto中为R表格添加左侧额外行标题层的实现方法

在Quarto中为表格左侧添加带旋转效果的行分组标题

问题背景

需要在Quarto的表格左侧添加类似列分组标题(add_header_above()实现)的行分组标题,且要求分组文本可以旋转90度,现有kable的近似方法无法实现旋转效果,表格工具不局限于kable。

解决方案1:用kableExtra结合CSS实现行分组与旋转

通过pack_rows()创建行分组,利用CSS属性实现文本旋转,无需手动修改数据框结构:

library(kableExtra)
df<-data.frame(x1=c(1,2,3,1), x2=c(2,4,6,2), x3=c(3,2,5,1), x4=c(2,3,4,4))
rownames(df)<-c("y1", "y2", "y3", "y4")

kable(df, booktabs=T) %>% 
  add_header_above(c(" "=1, "Group1"=2, "Group2"=2)) %>%
  # 创建行分组并通过CSS设置文本旋转与对齐
  pack_rows(
    index = c("Group1" = 2, "Group2" = 2), 
    label_row_css = "vertical-align: middle; text-align: center; writing-mode: vertical-rl;",
    background = "white"
  ) %>%
  column_spec(column = 1,  bold=T, border_right = "1px solid lightgray") %>%
  row_spec(0, bold = TRUE) # 可选:为顶部列分组标题加粗
  • writing-mode: vertical-rl实现文本竖排(等同于旋转90度的视觉效果)
  • pack_rows()自动完成行分组,无需手动调整行名或拼接数据

解决方案2:用gt包实现更灵活的样式控制

gt包对行分组和文本旋转的支持更直观,无需依赖额外CSS:

library(gt)
df<-data.frame(
  group = rep(c("Group1", "Group2"), each=2),
  y = c("y1", "y2", "y3", "y4"),
  x1=c(1,2,3,1), 
  x2=c(2,4,6,2), 
  x3=c(3,2,5,1), 
  x4=c(2,3,4,4)
)

gt(df) %>%
  # 设置顶部列分组标题
  tab_spanner(label = "Group1", columns = c(x1, x2)) %>%
  tab_spanner(label = "Group2", columns = c(x3, x4)) %>%
  # 配置行分组及旋转效果
  row_group_order(groups = c("Group1", "Group2")) %>%
  opt_row_group_styling(
    label_align = "center",
    label_text_transform = function(x) rotate_text(x, angle = 90)
  ) %>%
  # 调整y列样式:加粗+右侧边框
  cols_style(
    columns = y,
    font_weight = "bold",
    text_transform = function(x) html("<span style='border-right:1px solid lightgray; padding-right:8px;'>", x, "</span>")
  ) %>%
  cols_hide(columns = group) %>% # 隐藏用作分组的原始列
  opt_table_style(style = "booktabs") # 匹配booktabs表格风格
  • rotate_text()可直接设置旋转角度,无需手写CSS
  • tab_spanner()与行分组功能配合,快速实现对称的表格分组结构

内容的提问来源于stack exchange,提问作者gecko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:45:02