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

R语言按不同类别分组对比两时间段差异的t-test实现问询

R实现分类别t检验方案

前置修正

你提供的示例数据集存在语法错误,修正后可直接运行的版本如下:

Dataset <- data.frame(
  category = c("tools", "finance", "business", "education","tools","education"), 
  number_trackers = c(10, 12, 1, 30, 7, 21), 
  c4 = c("url1.com","ur2.com","url3.com","url4.com","url5.com","url6.com"),
  time = c(1,0,0,0,1,1)
)

注:示例数据中finance、business类别仅存在time=0的观测,没有时间对比的基础,运行检验代码时会自动跳过这两类,仅返回tools、education的检验结果。

方案1:tidyverse生态实现(输出结果规整易读)

适合需要批量整理检验结果、后续需要做可视化或表格输出的场景:

# 首次使用先安装依赖包
install.packages(c("dplyr", "purrr", "broom"))

# 加载包
library(dplyr)
library(purrr)
library(broom)

# 分类别执行t检验
t_test_result <- Dataset %>%
  group_by(category) %>%
  # 过滤掉只有单时间点观测、无法做对比的类别
  filter(n_distinct(time) == 2) %>%
  nest() %>%
  # 对每个类别的数据独立执行t检验
  mutate(t_test = map(data, ~t.test(number_trackers ~ time, data = .x))) %>%
  # 整理检验结果为结构化表格
  mutate(result = map(t_test, tidy)) %>%
  unnest(result) %>%
  select(category, estimate, statistic, p.value, conf.low, conf.high, method)

# 查看最终结果
View(t_test_result)

结果中p.value列即为对应类别的显著性值,小于你设定的显著性水平(通常为0.05)即可认为特定日期前后的number_trackers存在显著差异。

方案2:base R实现(无需依赖第三方包)

适合不想安装额外包的轻量使用场景:

# 提取所有唯一类别
all_categories <- unique(Dataset$category)
# 初始化结果存储列表
t_test_res <- list()

for (cat in all_categories) {
  sub_data <- Dataset[Dataset$category == cat, ]
  # 跳过只有单时间点的类别
  if (length(unique(sub_data$time)) != 2) {
    t_test_res[[cat]] <- "仅单时间点观测,无法执行t检验"
    next
  }
  # 执行t检验
  t_test_res[[cat]] <- t.test(number_trackers ~ time, data = sub_data)
}

# 打印所有检验结果
print(t_test_res)

注意事项

  • 若你的数据为配对设计(同一观测主体在日期前后均有对应记录),可在t.test()中添加参数paired = TRUE使用配对t检验
  • 若检验前验证过两组方差齐性,可添加参数var.equal = TRUE提升检验效能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:45:06