如何按因子生成随机治疗变量?

时间:2011-03-23 01:08:38

标签: r random r-factor

定义

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?

中生成治疗向量

1 个答案:

答案 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变量拆分数据框,并在每个数据框内,“transformstreat列将2个随机选择的条目替换为1和2. sample(...,2)函数在treat列中选择两个随机索引。其他变体(例如,指定每种治疗类型超过1种)可以类似地进行。