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

基于col1分组,实现col2各组与其余组的Wilcoxon检验

解决方法

你可以通过 group_modify 配合 map_dfr 实现需求,具体代码如下:

library(tidyverse)

# 生成示例数据
df <- data.frame(x=abs(rnorm(50)),col1=rep(1:5,10), col2=rep(1:4,25))

# 计算每个col1分组内,col2各组与其余组的Wilcoxon检验p值
result <- df %>%
  group_by(col1) %>%
  group_modify(function(group_data, group_key) {
    # 获取当前col1分组下所有唯一的col2值
    col2_groups <- unique(group_data$col2)
    
    # 遍历每个col2分组,计算p值并组合成结果表
    map_dfr(col2_groups, function(g) {
      # 提取当前col2分组的x值,以及其余分组的x值
      x_group <- group_data$x[group_data$col2 == g]
      x_others <- group_data$x[group_data$col2 != g]
      
      # 执行Wilcoxon秩和检验并提取p值
      p_val <- wilcox.test(x_group, x_others)$p.value
      
      # 返回当前分组的结果行
      tibble(col2 = g, p_value = p_val)
    })
  }) %>%
  ungroup()

# 查看结果
print(result)

代码说明:

  • group_by(col1):将数据按col1分组,后续操作在每个col1分组内独立执行。
  • group_modify:对每个col1分组应用自定义函数,group_data为当前分组的数据集,group_key包含当前分组的col1值。
  • unique(group_data$col2):获取当前col1分组下所有不重复的col2取值,确保每个col2分组都被处理。
  • map_dfr:遍历每个col2分组g,执行检验并将结果按行绑定成数据框:
    • 分别筛选出col2 == g和col2 != g对应的x值;
    • 调用wilcox.test完成秩和检验,提取p.value;
    • 用tibble生成包含col2和p_value的结果行。
  • ungroup():移除分组属性,得到最终的平级结果表。

最终得到的result包含你需要的三列:col1、col2和对应的p_value。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:22:41