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

如何用dplyr对数据框各AOI下KPI列做Stimuli A/B的t检验并汇总

用dplyr自动化AOI分组下的KPI t检验与均值汇总

问题背景

我有一份可复现的R数据集:

set.seed(949494)
KPI1 <- round(runif(50, 1, 100))
KPI2 <- round(runif(50, 1, 100))
KPI3 <- round(runif(50, 1, 100))
ID <- rep(c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7", "ID8", "ID9", "ID10"), times = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5))
Stimuli <- rep(rep(c("A", "B"), times = c(5, 5)), 5)
AOI <- rep(c("Text", "Picture", "Button", "Product", "Logo"), 5)
DF <- data.frame(ID, Stimuli, AOI, KPI1, KPI2, KPI3)

在更大的数据集上,手动对每个AOI(Text、Picture等)下的各KPI列(KPI1、KPI2、KPI3)分别做Stimuli A与B的t检验效率极低。作为R初学者,希望用dplyr实现自动化操作,最终汇总出包含t检验p值和各AOI下KPI均值(跨所有ID)的表格。

解决方案

通过dplyr结合tidyr可以轻松实现批量处理,步骤如下:

  1. 先加载所需的R包:
library(dplyr)
library(tidyr)
  1. 将宽格式数据转为长格式,方便按KPI分组处理:
df_long <- DF %>%
  pivot_longer(cols = starts_with("KPI"), 
               names_to = "KPI", 
               values_to = "Value")
  1. 按AOI和KPI分组,批量计算均值并执行t检验,汇总结果:
summary_table <- df_long %>%
  group_by(AOI, KPI) %>%
  summarise(
    # 计算Stimuli A和B的均值
    Mean_A = mean(Value[Stimuli == "A"], na.rm = TRUE),
    Mean_B = mean(Value[Stimuli == "B"], na.rm = TRUE),
    # 执行两样本t检验并提取p值
    t_test_p_value = t.test(Value ~ Stimuli, data = cur_data())$p.value,
    .groups = "drop" # 计算完成后取消分组
  )

# 查看最终汇总表
print(summary_table)

关键代码说明

  • pivot_longer:把分散的KPI1/KPI2/KPI3列转换为"KPI"(变量名)和"Value"(对应数值)的长格式,让每个AOI+KPI组合都能独立处理。
  • group_by(AOI, KPI):设置双重分组,确保每个AOI下的每个KPI单独计算均值和t检验。
  • cur_data():在分组计算中,指代当前分组的子数据集,给t.test提供对应的数据子集。
  • t.test(Value ~ Stimuli):以Stimuli为分组变量,对KPI数值做两样本t检验,通过$p.value直接提取检验的p值。

可选调整

如果需要指定t检验的方差齐性假设(比如假设方差相等),可以修改t.test的参数:

t_test_p_value = t.test(Value ~ Stimuli, data = cur_data(), var.equal = TRUE)$p.value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:12:50