Как создать случайную переменную лечения по фактору? - PullRequest
2 голосов
/ 23 марта 2011

Определить

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 и 2. Я хочу назначить ровно одну единицу на класс для каждого уровня s.t. что после рандомизации мы получим что-то вроде:

> 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 Ответ

4 голосов
/ 23 марта 2011

Полагаю, вы просто хотите назначить одну процедуру 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 каждого типа лечения) могут быть выполнены аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...