如何在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
相关产品推荐
相关产品推荐

