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

如何在R中随机化人口统计变量且相同Subject_ID对应相同随机值?

按Subject_ID分组生成一致随机值的R实现

首先先把你的数据集转换成R可处理的数据框:

df <- data.frame(
  Subject_ID = c("A1", "A1", "C2", "D3", "R4", "R4"),
  Age = c(27, 27, 22, 40, 25, 25),
  Gender = c("Male", "Male", "Female", "Male", "Female", "Female"),
  Ethnicity = c("White", "White", "Asian", "Black", "Asian", "Asian")
)

方法一:用dplyr分组处理(新手友好,逻辑直观)

如果没装过dplyr包先安装,之后加载包,通过分组操作给每个Subject_ID生成唯一随机值,组内所有行复用该值:

# 安装dplyr(首次使用时运行)
# install.packages("dplyr")
library(dplyr)

# 生成0-1之间的随机数,同ID值一致
df_with_random <- df %>%
  group_by(Subject_ID) %>%
  mutate(Random_Num = runif(1)) %>%  # 每组仅生成1个随机数,自动填充组内所有行
  ungroup()

# 如果需要随机分配组别(比如对照组/处理组)
df_with_group <- df %>%
  group_by(Subject_ID) %>%
  mutate(Treatment_Group = sample(c("Control", "Treatment"), 1)) %>%
  ungroup()

方法二:Base R实现(无需额外安装包)

先给唯一ID生成随机值,再合并回原数据集,确保同ID对应相同随机结果:

# 提取所有不重复的Subject_ID
unique_ids <- unique(df$Subject_ID)

# 给每个唯一ID生成随机值,构建匹配表
id_random_map <- data.frame(
  Subject_ID = unique_ids,
  Random_Num = runif(length(unique_ids))
)

# 合并回原数据集
df_random_base <- merge(df, id_random_map, by = "Subject_ID")

注意事项

如果需要固定随机结果(可重复运行得到相同值),在生成随机数前添加set.seed(),比如set.seed(123),这样每次运行代码的随机输出都一致,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:40:03