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

按Accession分组对长格式数据执行t.test的R语言问题求助

问题排查与解决

你遇到的问题根源很明确——在do()函数里调用t.test()时,你传入的是整个原始数据集Book18_melt,而不是group_by(Accession)后拆分出的每个分组子集。这就导致每个Accession分组都在对全量数据做t检验,结果自然完全相同。

修正后的代码

把t.test()里的数据集参数换成.(在dplyr的do()语境中,.代表当前分组的子数据框):

data_frame <- Book18_melt %>% 
  group_by(Accession) %>% 
  do(broom::tidy(t.test(value ~ X1, data = ., var.equal = TRUE))) %>% 
  ungroup()

额外注意事项

  1. NA值处理:从你给出的长格式数据来看,存在NA值。t.test()默认会自动忽略含NA的观测,但如果某个分组里其中一组(35S或N85)的有效数据不足2个,会报错。你可以提前过滤NA,或者在t.test()里加上na.action = na.omit明确处理:

    data_frame <- Book18_melt %>% 
      group_by(Accession) %>% 
      do(broom::tidy(t.test(value ~ X1, data = ., var.equal = TRUE, na.action = na.omit))) %>% 
      ungroup()
    
  2. 分组有效性检查:建议先检查每个Accession下,35S和N85组是否都有足够的样本量(至少2个非NA值),避免后续报错:

    sample_check <- Book18_melt %>%
      filter(!is.na(value)) %>%
      count(Accession, X1) %>%
      tidyr::pivot_wider(names_from = X1, values_from = n)
    print(sample_check)
    

这样修改后,每个Accession都会独立进行组间t检验,得到的p值就会是对应分组的真实结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:32:33