R语言区块内处理随机分配问题:现有代码存疑需解决
区块内随机分配处理的R实现方案
咱们先从构建初始数据框开始,用下面的代码就能生成包含区块(block)和位置(position)的基础数据:
design <- read.table(text = "block position 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4", header = TRUE)
接下来要实现的是每个区块内随机分配四种处理,咱们可以这么操作:
# 定义4种处理类型 treatment <- letters[1:4] # 设置随机种子,确保结果可以复现 set.seed(2) # 针对2个区块分别随机打乱处理序列,再转为向量添加到数据框中 design$treatment <- as.vector(replicate(2,sample(treatment, length(treatment))))
运行完上面的代码后,就能得到每个区块内处理随机分配好的数据框啦,输出结果如下:
> design block position treatment 1 1 1 a 2 1 2 c 3 1 3 b 4 1 4 d 5 2 1 d 6 2 2 c 7 2 3 a 8 2 4 b
简单说下逻辑:replicate(2, sample(treatment, length(treatment)))会针对2个区块,分别对处理向量做一次随机打乱,再用as.vector()把二维的结果转成一维向量,刚好能和数据框的行数匹配,完美实现单个区块内的处理随机分配需求~
内容的提问来源于stack exchange,提问作者retodomax
相关产品推荐
相关产品推荐

