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

如何在R中按条件重复代码:24名参与者的平衡设计需求

解决方案:为24名参与者生成符合Random列一致性要求的实验数据

我来帮你搞定这个需求!核心是要先统一全局的Random列规则,再给每个参与者生成对应的数据,这样就能保证Target == 0时,每个(Trial, Route, Scene2)组合下所有参与者的1和0总数完全一致,不用手动重复执行24次代码还得对齐数据。

步骤1:定义基础实验参数

先把实验的固定参数明确下来,你可以根据实际需求调整数值:

# 基础配置参数
num_participants <- 24  # 参与者总数
scene2_vals <- 1:10     # Scene2的取值范围
trial_vals <- 1:9       # Trial的取值范围
route_vals <- 1:3       # 假设Route的取值是1-3,可替换为你的实际取值
random_count_target0 <- c(8, 16)  # Target=0时,每个组合下24个参与者的1和0数量(例:8个1,16个0)

步骤2:创建全局Random映射表

这是保证一致性的关键步骤——我们先为所有Target == 0的(Trial, Route, Scene2)组合预生成24个Random值,确保每个组合的1/0数量固定。对于Target == 1的场景(比如Scene2=7),你可以自定义Random规则:

# 生成所有可能的(Trial, Route, Scene2)组合
all_combinations <- expand.grid(
  Trial = trial_vals,
  Route = route_vals,
  Scene2 = scene2_vals
)

# 为每个组合生成对应24个参与者的Random值
all_combinations$Random_list <- lapply(1:nrow(all_combinations), function(i) {
  current_scene2 <- all_combinations$Scene2[i]
  if (current_scene2 == 7) {
    # Target=1的场景,自定义Random规则(示例:全1,可按需修改)
    rep(1, num_participants)
  } else {
    # Target=0的场景,生成固定数量的1和0后打乱顺序
    c(rep(1, random_count_target0[1]), rep(0, random_count_target0[2])) %>% 
      sample()  # 打乱顺序避免参与者的Random值固定排序
  }
})

步骤3:为每个参与者生成数据并合并

现在循环为每个参与者生成专属数据框,从全局映射表中取出对应的Random值:

# 初始化空列表存储每个参与者的数据
participant_dfs <- list()

for (part_num in 1:num_participants) {
  # 生成基础数据结构并排序(和映射表顺序对齐)
  part_df <- expand.grid(
    Trial = trial_vals,
    Route = route_vals,
    Scene2 = scene2_vals
  ) %>% 
    arrange(Trial, Route, Scene2)
  
  # 添加Target列
  part_df$Target <- ifelse(part_df$Scene2 == 7, 1, 0)
  
  # 从全局映射表中取出当前参与者的Random值
  part_df$Random <- sapply(all_combinations$Random_list, function(x) x[part_num])
  
  # 添加参与者标识
  part_df$Participant <- paste0("Part.", part_num)
  
  # 存入列表
  participant_dfs[[part_num]] <- part_df
}

# 合并所有参与者的数据为最终数据框
final_df <- do.call(rbind, participant_dfs)

验证一致性是否达标

你可以用下面的代码检查是否满足需求:

# 检查Target=0时,每个(Trial, Route, Scene2)组合的Random列1的总数
final_df %>% 
  filter(Target == 0) %>% 
  group_by(Trial, Route, Scene2) %>% 
  summarise(total_ones = sum(Random), .groups = "drop") %>% 
  pull(total_ones) %>% 
  unique()
# 如果输出是单一值(比如示例中的8),说明所有组合的1数量完全一致,符合要求

这个方案不用手动重复执行24次代码,通过全局映射表严格保证了Random列的数量一致性,你只需要调整基础参数就能适配你的实际实验设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:01:04