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

如何在R中按每4行分组执行wilcox.test检验?

解决方案

步骤1:添加分组标识

先给数据框每行分配组号,确保每4行属于同一组:

# 为数据添加分组列,每组4行
df1$group <- rep(seq_len(nrow(df1) %/% 4), each = 4)

注:nrow(df1) %/% 4会自动计算总组数,你的134000行数据刚好能被4整除,无需额外处理。

步骤2:分组执行配对Wilcoxon检验

以下两种实现方式均无需转换为宽格式:

方法一:Base R 实现

# 按分组拆分数据
grouped_data <- split(df1, df1$group)

# 遍历每个分组执行检验,提取关键结果
test_results <- lapply(grouped_data, function(sub_df) {
  # 对当前组的A和B做配对Wilcoxon检验
  wt_result <- wilcox.test(sub_df$A, sub_df$B, paired = TRUE)
  # 返回结构化结果
  data.frame(
    group = unique(sub_df$group),
    statistic = wt_result$statistic,
    p_value = wt_result$p.value,
    alternative_hypothesis = wt_result$alternative
  )
})

# 合并所有结果为一个数据框
final_results <- do.call(rbind, test_results)

方法二:Tidyverse 实现(更简洁)

library(dplyr)

final_results <- df1 %>%
  # 添加分组列
  mutate(group = rep(seq_len(n() %/% 4), each = 4)) %>%
  # 按分组聚合
  group_by(group) %>%
  # 对每个分组执行检验并整理结果
  group_map(function(sub_df, group_info) {
    wt_result <- wilcox.test(sub_df$A, sub_df$B, paired = TRUE)
    tibble(
      group = group_info$group,
      statistic = wt_result$statistic,
      p_value = wt_result$p.value,
      alternative_hypothesis = wt_result$alternative
    )
  }) %>%
  # 合并结果
  bind_rows()

说明

  • 上述代码均保留原数据的长格式(每行一个观测,A、B为列),无需转换为宽格式。
  • 配对Wilcoxon检验必须指定paired = TRUE,确保检验的是每组内A和B的成对差异。
  • 最终结果final_results包含每个组的检验统计量、p值及备择假设描述,方便后续分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:44:57