【发布时间】:2018-03-19 17:49:27
【问题描述】:
我有以下数据框
design <- read.table(text =
"block position
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4", header = TRUE)
我想在一个块内随机分配四个治疗。例如,我可以使用以下代码来做到这一点:
treatment <- letters[1:4]
set.seed(2)
design$treatment <- as.vector(replicate(2,sample(treatment, length(treatment))))
产生以下数据框
> design
block position treatment
1 1 a
1 2 c
1 3 b
1 4 d
2 1 d
2 2 c
2 3 a
2 4 b
问题:在上面的例子中,治疗 c 是在位置 2 两次。一次治疗不应该在同一位置两次。我怎样才能做到这一点?
更笼统:有没有简单的约束采样解决方案?
【问题讨论】:
-
除非你真的需要随机性,否则最简单的方法就是延迟每个组,例如
design$treatment <- unlist(lapply(seq(max(design$block)), function(x){letters[if (x == 1) 1:max(design$position) else c(seq(x, max(design$position)), seq(x - 1))]}))