使用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
相关产品推荐
相关产品推荐

