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

