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

如何用R的tableby()将分层显示为列而非行?求替代方案

实现分层(strata)按列展示的统计表格

用arsenal包的tableby()实现

可以通过将分层变量与子类别变量交叉作为分组列,同时开启观测数显示来实现需求:

knitr::opts_chunk$set(echo = TRUE)

library(arsenal)
require(knitr)
data(mockstudy)

# 筛选目标治疗组数据
dat <- subset(mockstudy, arm %in% c("A: IFL", "F: FOLFOX"))

# 以治疗组+性别的交叉组合作为列分组,构建统计表格
tab <- tableby(age + bmi ~ arm * sex, data = dat)

# 输出表格,开启列标题的观测数显示
summary(tab, show.n = TRUE, title = "按治疗组和性别分层的统计结果")

如果更倾向于手动定义分组名称,可以先构造交叉分组变量:

dat$subgroup <- paste(dat$arm, dat$sex, sep = " - ")
tab <- tableby(age + bmi ~ subgroup, data = dat)
summary(tab, show.n = TRUE)

用gtsummary包实现(更灵活美观)

gtsummary对列分层表格的支持更直观,输出格式也更适配报告场景:

library(gtsummary)
library(dplyr)

dat %>%
  filter(arm %in% c("A: IFL", "F: FOLFOX")) %>%
  tbl_summary(
    include = c(age, bmi),  # 指定需要展示的变量
    by = c(arm, sex),       # 按治疗组和性别交叉分层为列
    # 自定义数值变量的统计量格式(可选,按需调整)
    statistic = list(
      age ~ "{mean} ({sd})",
      bmi ~ "{mean} ({sd})"
    )
  ) %>%
  # 自定义列标题,显示分组名称和观测数
  modify_header(all_stat_cols() ~ "{level} (n = {n})") %>%
  as_kable()  # 转为kable格式适配Rmarkdown渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:20:16