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

如何为gtsummary表格添加分类并设置年龄区间?

用gtsummary制作目标汇总表的实操方案

1. 把编码值替换成中文名称

不管是0/1/2这类数字编码,直接把变量转成因子就行,gtsummary会自动识别因子标签,不用额外操作。

方法一:预处理数据(推荐,不影响后续分析)

library(gtsummary)
library(dplyr)

# 假设你的数据集叫df,这里以性别(0=男/1=女)、吸烟状态(0=不吸/1=吸/2=偶尔吸)为例
df <- df %>%
  mutate(
    gender = factor(gender, levels = c(0,1), labels = c("男", "女")),
    smoke_status = factor(smoke_status, levels = c(0,1,2), labels = c("不吸烟", "吸烟", "偶尔吸烟"))
  )

方法二:不修改原始数据,直接在表格里替换

如果不想改动原始数据集,用modify_table_body批量替换:

tbl_summary(df) %>%
  modify_table_body(
    mutate,
    label = case_when(
      variable == "gender" & value == "0" ~ "男",
      variable == "gender" & value == "1" ~ "女",
      variable == "smoke_status" & value == "0" ~ "不吸烟",
      variable == "smoke_status" & value == "1" ~ "吸烟",
      variable == "smoke_status" & value == "2" ~ "偶尔吸烟",
      TRUE ~ label # 其他变量保持原样
    )
  )

2. 设置年龄区间

用cut()函数把连续年龄拆成你需要的区间,比如<40岁、40-59岁、≥60岁:

方法一:新增分组变量

df <- df %>%
  mutate(
    age_group = cut(age, 
                   breaks = c(-Inf, 40, 60, Inf), # 区间分界点
                   labels = c("<40岁", "40-59岁", "≥60岁")) # 区间名称
  )

之后直接把age_group放进汇总表里就行。

方法二:在表格里直接生成区间(不用新增变量)

tbl_summary(df, 
            include = age, # 指定只处理年龄变量
            statistic = age ~ "{n} ({p}%)", # 显示频数和占比
            value = age ~ cut(age, breaks = c(-Inf,40,60,Inf), labels = c("<40岁", "40-59岁", "≥60岁"))
            )

3. 给特征添加分类分组

要像示例表格那样把特征分成“人口学特征”“生活习惯”这类组别,用add_grouping()函数就能实现:

完整整合示例

# 先模拟一份数据(你替换成自己的数据集就行)
set.seed(123)
df <- tibble(
  age = sample(20:80, 100, replace = TRUE),
  gender = sample(0:1, 100, replace = TRUE),
  smoke_status = sample(0:2, 100, replace = TRUE),
  bp = sample(0:1, 100, replace = TRUE), # 0=血压正常/1=血压异常
  blood_sugar = sample(0:1, 100, replace = TRUE) # 0=血糖正常/1=血糖异常
)

# 一步完成数据预处理:编码替换+年龄分组
df_processed <- df %>%
  mutate(
    # 替换编码为名称
    gender = factor(gender, levels = c(0,1), labels = c("男", "女")),
    smoke_status = factor(smoke_status, levels = c(0,1,2), labels = c("不吸烟", "吸烟", "偶尔吸烟")),
    bp = factor(bp, levels = c(0,1), labels = c("血压正常", "血压异常")),
    blood_sugar = factor(blood_sugar, levels = c(0,1), labels = c("血糖正常", "血糖异常")),
    # 生成年龄区间
    age_group = cut(age, breaks = c(-Inf, 40, 60, Inf), labels = c("<40岁", "40-59岁", "≥60岁"))
  )

# 制作带特征分类的汇总表
tbl_summary(df_processed, 
            include = c(age_group, gender, smoke_status, bp, blood_sugar),
            statistic = all_categorical() ~ "{n} ({p}%)") %>%
  # 添加特征分组
  add_grouping(variable = c(age_group, gender), label = "人口学特征") %>%
  add_grouping(variable = smoke_status, label = "生活习惯") %>%
  add_grouping(variable = c(bp, blood_sugar), label = "临床指标") %>%
  # 美化表格(可选)
  modify_header(label = "特征") %>%
  bold_labels()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:21:05