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

R中长格式含缺失值数据集单命令执行配对pairwise.t.test

问题1:配对关系识别逻辑与排序有效性
  • pairwise.t.test开启paired=TRUE时不会主动读取数据中的id列信息,完全依靠不同分组的观测顺序识别配对:默认time组的第1个观测互配、第2个观测互配,以此类推。
  • 你当前的排序逻辑存在风险:示例数据能跑出正确结果仅因为生成时每个time组内的id顺序完全一致,一旦实际数据排序发生变化,哪怕所有id都完整,也会得到完全错误的配对检验结果。建议在做检验前,对每个marker分组下的数据统一按id排序,确保所有time组的id顺序完全对应。
问题2:缺失值报错解决方案

报错原因是删除含缺失值的行后,不同time组的观测数量不一致,不符合配对检验要求。你可以在不改动原有代码核心结构的前提下,仅在分组计算时先过滤掉当前marker下存在任意时间点缺失的id,确保保留的id都有完整的4个时间点检测值即可,修改后的代码如下:

dt_ttest <- data.table::data.table(mydata_long)
adf2 <- as.data.frame(dt_ttest[, {
  # 新增:仅保留当前marker下所有时间点都有值的id
  valid_dt <- .SD[, .SD[all(!is.na(value))], by = id]
  stats::na.omit(as.data.frame.table(
    stats::pairwise.t.test(valid_dt$value, valid_dt$time,
                           p.adjust.method="none", pool.sd=FALSE,
                           var.equal=TRUE, paired=TRUE)$p.value,
    responseName="pvalue", stringsAsFactors=FALSE))
}, by=marker])
names(adf2)[2:3] <- paste0("Group_", c("B","A")) 
adf2
  • 该修改仅在原分组逻辑内新增了id有效性过滤步骤,完全保留了你原有检验、结果整理的代码逻辑,无需调整后续处理流程。
  • 如果你想要保留尽可能多的配对,不需要要求id所有4个时间点都完整,仅需要两两比较的两个时间点都有值即可,可以将pairwise.t.test替换为rstatix::pairwise_t_test,该函数会自动处理两两比较时的缺失值配对,不需要额外过滤全时间点完整的id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:06:00