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

使用tidyverse嵌套分组数据框执行全部t检验并提取p值的实现方法

完整实现代码

基础版本(仅提取p值)

首先加载tidyverse包:

library(tidyverse)

示例测试数据:

set.seed(123) # 保证结果可复现
df <- data.frame(quest = c("2","4","6"), 
                 item_1 = rnorm(12,5,1),
                 item_2 = rnorm(12,5,1),
                 item_3 = rnorm(12,5,1))

核心处理逻辑,完全匹配你预期的nest_by + unnest结构:

df %>%
  # 按quest分组嵌套
  nest_by(quest) %>%
  mutate(
    # 生成所有item类变量的两两不重复组合
    var_pairs = list(combn(colnames(data)[starts_with("item", vars = colnames(data))], 2, simplify = F)),
    # 遍历所有配对执行配对t检验,提取结果
    test_result = list(
      map_dfr(var_pairs, function(pair) {
        tibble(
          var1 = pair[1],
          var2 = pair[2],
          p_value = t.test(data[[pair[1]]], data[[pair[2]]], paired = TRUE)$p.value
        )
      })
    )
  ) %>%
  select(quest, test_result) %>%
  # 展开结果得到结构化输出
  unnest(test_result)

扩展版本(支持提取更多检验指标)

如果需要同时获取t值、置信区间等其他检验结果,可以使用tidyverse生态的broom包整理检验输出:

df %>%
  nest_by(quest) %>%
  mutate(
    var_pairs = list(combn(colnames(data)[starts_with("item", vars = colnames(data))], 2, simplify = F)),
    test_result = list(
      map_dfr(var_pairs, function(pair) {
        t.test(data[[pair[1]]], data[[pair[2]]], paired = TRUE) %>%
          broom::tidy() %>%
          mutate(var1 = pair[1], var2 = pair[2]) %>%
          # 可按需调整要提取的指标,比如statistic、conf.low、conf.high等
          select(var1, var2, p_value = p.value, t_value = statistic)
      })
    )
  ) %>%
  select(quest, test_result) %>%
  unnest(test_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:04