如何在R中复现SAS生成的按年龄性别分组的患病率表格?
解决方案:用gt_summary复现流行病学患病率表格
问题分析
你的原代码逻辑有误:把Age_interval当成了待统计的变量,而非分组依据;未针对Confirmatory_results(患病结果)设置正确的统计规则,也没添加总体患病率列。以下是修正后的代码及说明:
步骤1:预处理数据(确保患病结果为二分类)
先确认Confirmatory_results是二分类变量(比如"阳性"/"阴性"或1/0),如果是字符型,先转成因子:
df_linked6 <- df_linked6 %>% mutate( Confirmatory_results = factor(Confirmatory_results, levels = c("Negative", "Positive"), # 按实际取值调整 labels = c("未患病", "患病")) # 可选:设置更友好的标签 )
步骤2:生成目标患病率表格
# 按年龄组、性别计算查加斯病患病率 df_linked6 %>% select(Age_interval, Sex, Confirmatory_results) %>% group_by(Age_interval) %>% # 以10年年龄组为行分组 tbl_summary( by = Sex, # 按性别拆分列 include = Confirmatory_results, # 仅统计患病结果 label = list(Confirmatory_results ~ "患病率"), # 统计规则:每个单元格显示「患病数/组总人数(百分比)」 statistic = list(all_categorical() ~ "{n}/{N} ({p}%)"), percent = "cell", # 百分比基于当前年龄-性别组的总人数 missing = "no" # 不展示缺失值(按需调整) ) %>% add_overall(col_label = "总体") %>% # 添加总体患病率列 modify_header(label = "年龄组(岁)") %>% # 把默认label表头改为「年龄组(岁)」 modify_spanning_header(all_stat_cols() ~ "性别") %>% # 添加跨列表头「性别」 bold_labels() # 加粗行标签(年龄组)
关键修正点
- 用
group_by(Age_interval)指定行分组依据,而非把年龄组作为统计变量 - 针对
Confirmatory_results设置统计规则,确保计算的是每组内的患病比例 - 添加
add_overall()生成总体患病率列 - 用
percent = "cell"确保百分比基于每个年龄-性别组的总人数(符合患病率定义)
内容的提问来源于stack exchange,提问作者jhar123
相关产品推荐
相关产品推荐

