如何为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
相关产品推荐
相关产品推荐

