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

如何在R中为Control T0行随机分配T1的Treat1/Treat2重复样本?

解决方案

步骤思路

我们需要按城市分组独立处理,确保每个城市内T1时间点的Treat1、Treat2样本(各3个)被随机分配到同城市的Control T0行中,下面提供两种贴合不同需求的实现方式:


方式一:修改原Control T0样本的处理类型(保留样本名,调整分组)

适合需要保留原T0样本条目,仅随机替换部分样本的处理标签的场景:

library(dplyr)
set.seed(123) # 固定随机种子,保证结果可复现

metadata_processed <- metadata %>%
  group_by(city) %>%
  mutate(
    # 对Control T0的9个样本,随机分配3个Control、3个Treat1、3个Treat2
    treatment = if_else(
      time == "T0" & treatment == "Control",
      sample(
        c(rep("Control", 3), rep("Treat1", 3), rep("Treat2", 3)),
        size = sum(time == "T0" & treatment == "Control"),
        replace = FALSE
      ),
      treatment
    )
  ) %>%
  ungroup()

# 验证分组数量是否符合预期
table(metadata_processed$city, metadata_processed$treatment, metadata_processed$time)

方式二:迁移T1组的Treat样本到T0组(保留样本原始处理标签,调整时间)

适合需要将原T1的Treat样本直接转移到T0组,同时移除原T1组对应条目的场景:

library(dplyr)
set.seed(123)

# 提取需要迁移的样本,将时间改为T0
treat_to_move <- metadata %>%
  filter(time == "T1", treatment %in% c("Treat1", "Treat2")) %>%
  mutate(time = "T0")

# 保留除迁移样本外的其他条目
remaining_data <- metadata %>%
  filter(!(time == "T1" & treatment %in% c("Treat1", "Treat2")))

# 合并数据并随机打乱T0组的顺序
metadata_processed <- bind_rows(remaining_data, treat_to_move) %>%
  arrange(city, time, sample(row_number()))

# 验证结果
table(metadata_processed$city, metadata_processed$treatment, metadata_processed$time)

补充说明

  • 移除set.seed(123)可获得每次不同的随机分配结果
  • 两种方式的核心差异:方式一修改原T0样本的分组标签,方式二迁移原T1样本到T0组
  • 可通过table()函数快速确认处理后各城市、时间、处理组的样本数量是否符合要求

内容的提问来源于stack exchange,提问作者i.b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:33:15