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

如何修改CreateTableOne函数解决重复观测计数错误及非正态变量展示问题

问题解决方案

一、修正重复观测导致的性别计数错误

问题根源:当前数据集为长结构,同一受试者存在多条重复测量记录,直接调用CreateTableOne会将每条记录判定为独立个体,导致性别、年龄这类受试者层面的固定变量计数错误。
解决逻辑:先将数据集转换为每个唯一ID对应一行的受试者水平结构,对重复测量的任务类变量(如acc、resp等)先按ID聚合统计后,再生成汇总表。
操作逻辑:

  • 使用dplyr包的group_by+distinct逻辑,按ID分组聚合任务变量,再保留每个ID的唯一行。
  • 若仅需统计人口学变量的计数,直接对ID、性别、年龄三个变量去重即可。

二、非正态变量替换为中位数(Q1,Q3)展示

直接在CreateTableOne函数中添加nonnormal参数,传入不符合正态分布的变量名向量,tableone包会自动将对应变量的统计量从默认的均值(标准差)替换为中位数(第一四分位数, 第三四分位数)。

修正后完整代码示例

library(dplyr)
library(tableone)
library(knitr)

# 构建每个ID对应一行的分析数据集
d_analyze <- d %>%
  group_by(ID) %>%
  # 对重复测量的任务变量按ID聚合,可按需替换为均值、最大值等统计量
  mutate(acc_subj = median(acc, na.rm = TRUE)) %>%
  ungroup() %>%
  # 每个ID仅保留唯一行,避免重复计数
  distinct(ID, .keep_all = TRUE)

# 生成汇总表
result_tab <- CreateTableOne(
  vars = c('Task general', 'Grd', 'key', 'resp', 'age', 'acc_subj'), 
  # 此处按实际分组需求调整strata参数,如需按性别分组则保持当前设置
  strata = 'gender',
  factorVars = c('gender'),
  # 指定非正态变量,自动输出中位数(Q1,Q3)
  nonnormal = c('age', 'acc_subj'),
  argsApprox = list(correct = FALSE), 
  smd = TRUE, 
  addOverall = TRUE, 
  test = TRUE)

# 输出表格
result_tab %>%
  na.omit() %>%
  kableone()

注:若确实需要保留长格式数据做重复测量层面的汇总,仅需修正性别计数,可通过svydesign构建调查权重,将每个ID的权重设置为1/该ID的重复测量次数即可,上述方案为适用场景最广的稳妥解法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:27:04