2

定義

x <- data.frame(
     ID=letters[1:10],
     class = as.factor(c(rep(1,5),rep(2,5))),
     treat = rep(0,10))

st

> 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 と 2 の 2 つのレベルの治療があります。クラスごとに 1 つのユニットを各レベル st に正確に 1 つ割り当てたいと思います。ランダム化後、次のようになります。

> 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 

st ユニットcjは治療のレベル 1 を取得し、eiはレベル 2 を取得します。

Rで処理ベクトルを生成するにはどうすればよいですか?

4

1 に答える 1

4

各クラスにレベル 1 の治療を1 つとレベル 2 の治療を 1割り当てたいだけだと仮定します。パッケージの関数を使用して簡単に実行できます。ddplyplyr

  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変数で分割し、各データ フレーム内で、ランダムに選択された 2 つのエントリを 1 と 2 で置き換えることにより列を" transforms"分割します。関数は、列内の 2 つのランダムなインデックスを選択します。他のバリアント (たとえば、各処理タイプを 1 つ以上割り当てる) も同様に行うことができます。treatsample(...,2)treat

于 2011-03-23T01:47:26.027 に答える