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

R语言如何对数据框分组变量批量运行ANOVA与T检验

R语言按物品分组检验成本组间差异实现方案

实现思路

  • 按Item字段拆分原始数据,每个物品对应独立的子数据集
  • 逐个子集判断有效分组数量,自动匹配检验方法:
    • 有效分组数<2:无法开展组间均值比较,返回NA
    • 有效分组数=2:采用Welch双样本T检验(不强制要求组间方差齐性,结果更稳健)
    • 有效分组数≥3:采用单因素ANOVA检验
  • 提取每个检验结果的P值,和物品名称一一匹配,合并为最终汇总表

可直接运行的实现代码

# 加载依赖包,首次运行先执行安装命令:install.packages("dplyr")
library(dplyr)

# --------------- 替换为你自己的数据读入代码 ---------------
# 以下为模拟测试数据,实际使用时替换为自己的数据读入逻辑,比如df <- read.csv("你的数据文件路径.csv")
df <- data.frame(
  Item = rep(c("Book A", "Book B", "Book C", "Book D"), each = 15),
  Cost = c(rnorm(15, 20, 3), rnorm(15, 35, 5), rnorm(15, 12, 2), rnorm(15, 50, 7)),
  Grouping = rep(c("A", "B", "C"), 20)
)
# -----------------------------------------------------------

# 定义单物品检验函数
calc_item_p <- function(sub_data) {
  valid_groups <- unique(na.omit(sub_data$Grouping))
  group_count <- length(valid_groups)
  
  if (group_count < 2) {
    return(NA_real_)
  } else if (group_count == 2) {
    t_res <- t.test(Cost ~ Grouping, data = sub_data)
    return(t_res$p.value)
  } else {
    aov_res <- aov(Cost ~ Grouping, data = sub_data)
    aov_sum <- summary(aov_res)
    return(aov_sum[[1]][["Pr(>F)"]][1])
  }
}

# 批量计算所有物品的检验结果,生成汇总表
result_table <- df %>%
  group_by(Item) %>%
  group_modify(~ data.frame(p_value = calc_item_p(.x))) %>%
  ungroup()

# 打印查看结果
print(result_table)

结果说明

  • 最终生成的result_table即为要求的结构化汇总表,每行对应一个物品,列分别为物品名称、检验P值,检验原假设为该物品所有分组下成本均值一致
  • 若P值低于预设显著性水平(常用阈值为0.05),即可拒绝原假设,判定对应物品不同分组的成本均值存在显著差异
  • 若某物品仅在1个分组下有观测数据,对应P值返回NA,可根据实际业务规则处理这类条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:21:22