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

如何使用tidyverse按条件分组执行多个t检验并返回所有p值

调整后可直接运行的代码

library(tidyverse)
library(broom)

# 仅需要输出p值的简化写法
ds %>%
  select(quest, base, math:science) %>% 
  pivot_longer(cols = -c(quest, base), names_to = "subject", values_to = "score") %>%
  # 同时按年龄组、科目两个维度分组,匹配你手动拆分的每个检验子集逻辑
  group_by(quest, subject) %>% 
  summarise(p_value = t.test(score ~ base, data = cur_data())$p.value,
            .groups = "drop") %>% 
  as.data.frame()

如果需要保留t检验的全部统计结果(t值、置信区间、自由度等),可以用broom::tidy的完整写法:

ds %>%
  select(quest, base, math:science) %>% 
  pivot_longer(cols = -c(quest, base), names_to = "subject", values_to = "score") %>%
  group_by(quest, subject) %>% 
  summarise(t_result = list(tidy(t.test(score ~ base, data = cur_data()))),
            .groups = "drop") %>% 
  unnest(t_result) %>% 
  as.data.frame()

原代码问题说明

  1. 仅按quest分组,没有把科目维度加入分组规则,导致每个分组内包含了数学、英语、科学三个科目的混合数据,和你手动筛选的检验子集逻辑不一致
  2. 不需要单独提取t.test()的p.value再传给broom::tidy,tidy可以直接处理t检验返回的结果对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:04