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

如何在R中实现测试与层级双随机化并重复生成序列?

解决方案

针对你的需求,需要同时实现测试序列的随机全排列(每组9个测试无重复)和层级的随机打乱,以下分两种常见的数据结构给出修改后的R代码:

情况1:原始数据为宽格式(4列对应4个层级,每列是9个测试)

如果你的原始DataFrame是4列(每个层级一列),每列包含完整的9个测试,当前代码仅打乱了列的顺序(层级)但未打乱每列内的测试顺序,修改方式如下:

# 示例原始数据
original_df <- data.frame(
  Level1 = paste0("Test_", 1:9),
  Level2 = paste0("Test_", 1:9),
  Level3 = paste0("Test_", 1:9),
  Level4 = paste0("Test_", 1:9)
)

set.seed(123) # 可选,设置种子保证结果可复现
n_repeats <- 14

# 生成14组随机序列
result_list <- lapply(1:n_repeats, function(x) {
  # 第一步:随机打乱层级(列)的顺序
  shuffled_level_cols <- sample(ncol(original_df))
  temp_df <- original_df[, shuffled_level_cols]
  
  # 第二步:对每个层级列单独随机打乱测试顺序(全排列,保证无重复)
  temp_df[] <- lapply(temp_df, sample)
  
  temp_df
})

# 可选:将14组合并为带组标识的DataFrame
library(dplyr)
final_df <- bind_rows(result_list, .id = "Repeat_Group")

这段代码会让每组的层级顺序随机,且每个层级列内的测试都是9个不重复的随机排列,每组的测试序列相互独立。

情况2:原始数据为长格式(每行是一个测试+对应层级)

如果你的原始DataFrame是长格式(比如共36行:9个测试×4个层级),需要生成14组,每组包含9个不重复的测试,同时层级也随机分配,修改方式如下:

# 示例原始数据
original_long_df <- data.frame(
  test = rep(paste0("Test_", 1:9), 4),
  level = rep(c("Level1", "Level2", "Level3", "Level4"), each = 9)
)

set.seed(123)
n_repeats <- 14

result_list <- lapply(1:n_repeats, function(x) {
  # 随机生成9个测试的全排列(无重复)
  shuffled_tests <- sample(unique(original_long_df$test))
  
  # 随机分配层级(若需保持原始层级出现次数,可替换为sample(original_long_df$level, 9))
  shuffled_levels <- sample(c("Level1", "Level2", "Level3", "Level4"), 9, replace = TRUE)
  
  data.frame(Repeat_Group = x, Test = shuffled_tests, Level = shuffled_levels)
})

final_df <- bind_rows(result_list)

如果需要严格保持每个层级在每组中的出现次数与原始数据一致,只需将shuffled_levels的生成代码替换为:

shuffled_levels <- sample(original_long_df$level, 9)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:13:12