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

使用R gtsummary等工具生成带频数行百分比的三维HTML表格咨询

三维交叉表(同时展示频数与行百分比)HTML输出方案

方案1:gtsummary实现(与常用二维表格语法兼容,优先推荐)

# 加载所需依赖包
library(gtsummary)
library(vcd)
library(dplyr)

Arthritis |>
  # 指定Improved为三维表的分层维度
  tbl_strata(
    strata = Improved,
    .tbl_fun =
      ~ .x |>
        # 生成剩余两个维度的交叉表,计算行百分比
        tbl_cross(
          row = Treatment,
          col = Sex,
          percent = "row",
          label = list(Treatment = "治疗方案", Sex = "性别")
        ) |>
        # 自定义列名明确展示内容
        modify_header(
          all_stat_cols() ~ "{level}<br>(n, %)"
        )
  ) |>
  modify_caption("关节炎治疗效果交叉表(按改善程度分层)") |>
  # 转换为HTML格式输出
  as_gt() |>
  gt::as_raw_html()

运行后会以Improved(改善程度)作为分层维度,每个分层下展示治疗方案与性别的二维交叉表,每个单元格同时显示频数和行百分比,最终输出标准HTML格式表格,样式可通过gtsummary的常规自定义函数调整。

方案2:kableExtra实现

# 加载所需依赖包
library(kableExtra)
library(dplyr)
library(tidyr)
library(scales)
library(vcd)

# 先汇总计算每个单元格的频数与行百分比
stat_df <- Arthritis |>
  group_by(Treatment, Sex, Improved) |>
  summarise(n = n(), .groups = "drop_last") |>
  # 按治疗方案+改善程度为行维度计算行占比
  mutate(row_pct = percent(n / sum(n), accuracy = 0.1)) |>
  # 合并频数与百分比为单元格展示内容
  mutate(cell_val = paste0(n, " (", row_pct, ")")) |>
  select(-n, -row_pct) |>
  pivot_wider(names_from = Sex, values_from = cell_val) |>
  arrange(Improved, Treatment)

# 生成带分组的三维HTML表格
stat_df |>
  kable(
    format = "html",
    col.names = c("治疗方案", "改善程度", "女性", "男性"),
    caption = "关节炎治疗效果交叉表"
  ) |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = F) |>
  # 按改善程度折叠行分组,实现三维视觉效果
  pack_rows(index = table(stat_df$Improved)) |>
  # 移除重复的改善程度列
  remove_columns(2)

该方案通过折叠行分组实现三维视觉效果,Improved作为上层分组维度,下层展示治疗方案和性别交叉的统计值,样式可通过kableExtra的样式函数自定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:36:00