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

如何在R中对指定列执行指定次数permutation test:按每3个为一组重排数值

R实现按固定组大小打乱score列的置换操作

步骤1:构造示例数据集

df <- data.frame(
  activity = 1:12,
  score = c(2,4,1,6,10,2,3,6,8,5,6,8)
)

步骤2:核心实现函数

# 参数说明:
# raw_df: 原始数据集
# group_size: 每组的行数,默认取3
# n_perm: 重复打乱的总次数
shuffle_score_by_group <- function(raw_df, group_size = 3, n_perm = 100){
  # 生成分组标签,按顺序每group_size行归为一组
  group_label <- rep(1:(ceiling(nrow(raw_df)/group_size)), each = group_size)
  # 初始化列表存储所有次打乱后的结果
  perm_results <- vector("list", n_perm)
  
  for (k in 1:n_perm) {
    # 按组独立打乱score列,activity列保持原始值不变
    shuffled_score <- unlist(
      lapply(split(raw_df$score, group_label), sample)
    )
    # 生成单次打乱后的数据集
    perm_df <- raw_df
    perm_df$score <- shuffled_score
    perm_results[[k]] <- perm_df
  }
  return(perm_results)
}

步骤3:调用示例

# 执行10次分组打乱操作,返回包含10个结果数据集的列表
perm_list <- shuffle_score_by_group(df, group_size = 3, n_perm = 10)

# 查看第2次打乱后的结果
print(perm_list[[2]])

逻辑说明

  • 分组规则完全匹配需求:按activity的顺序每3行分为一组,每组内部的score值独立打乱,组间数值不会互换
  • activity列全程保留原始值,仅修改score列
  • 若后续需要做置换检验,直接遍历返回的perm_list计算对应统计量,再和真实观测的统计量对比即可得到置换p值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03