定义
x <- data.frame(
ID=letters[1:10],
class = as.factor(c(rep(1,5),rep(2,5))),
treat = rep(0,10))
s.t。
> x
ID class treat
1 a 1 0
2 b 1 0
3 c 1 0
4 d 1 0
5 e 1 0
6 f 2 0
7 g 2 0
8 h 2 0
9 i 2 0
10 j 2 0
我有两个级别的治疗,1&amp;我想为每个级别分配每个级别一个单位。在随机化之后,我们得到类似的东西:
> x
ID class treat
1 a 1 0
2 b 1 0
3 c 1 1
4 d 1 0
5 e 1 2
6 f 2 0
7 g 2 0
8 h 2 0
9 i 2 2
10 j 2 1
s.t。单位 c 和 j 获得治疗级别1, e 和 i 级别2。
如何在R?
中生成治疗向量答案 0 :(得分:4)
我假设您只想在每个班级中分配一个 1级治疗和一个 2级治疗。您可以使用ddply
包中的plyr
功能轻松完成此操作:
set.seed(1)
require(plyr)
> ddply(x, .(class), transform,
treat = replace(treat, sample(seq_along(treat),2), 1:2))
ID class treat
1 a 1 0
2 b 1 1
3 c 1 0
4 d 1 0
5 e 1 2
6 f 2 0
7 g 2 0
8 h 2 1
9 i 2 2
10 j 2 0
要解释:ddply
函数按class
变量拆分数据框,并在每个数据框内,“transforms
”treat
列将2个随机选择的条目替换为1和2. sample(...,2)
函数在treat
列中选择两个随机索引。其他变体(例如,指定每种治疗类型超过1种)可以类似地进行。