组行(ID),然后为每个组 ID 分配一个处理

group rows (ID) and then assign a treatment for each group ID

我正在处理一个长(人-周期)数据集,其数量不平衡(每个人的观察次数不同)。我想要做的是为每个人(在新列中)的每个 row/observation 随机分配一个治疗(A、B 或 C),治疗因人而异。所以每个人都会得到三种干预措施中的一种,并且干预措施对于他们的每一次观察都保持不变。

所以我想从 ID 列开始随机分配治疗。最终结果看起来像这样。

ID <- c(1,1,1,2,2,2,2,2,3,3,4,4,4,4,5,6,6,6,7,7)
Treatment <- c('a','a','a','b','b','b','b','b','c','c','a','a','a','a','b','c','c','c','a','a')

data <- data.frame(ID, Treatment)

data

我尝试了使用 ddply (How to generate a random treatment variable by factor?) 的示例,但是我希望处理变量对于分组变量是常量。

感谢您提供的任何帮助:)

您可以使用基数 R 通过 merge:

set.seed(1)

random_trt <- data.frame(ID = unique(ID),
                         New_Treatment = sample(c("a", "b", "c"), size = length(unique(ID)), replace = T))

merge(data, 
      random_trt, 
      by = "ID",
      all.x = T)

   ID Treatment New_Treatment
1   1         a             a
2   1         a             a
3   1         a             a
4   2         b             c
5   2         b             c
6   2         b             c
7   2         b             c
8   2         b             c
9   3         c             a
10  3         c             a
11  4         a             b
12  4         a             b
13  4         a             b
14  4         a             b
15  5         b             a
16  6         c             c
17  6         c             c
18  6         c             c
19  7         a             c
20  7         a             c

您使用 sample 为每个独特的 ID 随机抽样您的处理向量。然后将其合并为一对多合并,以便它为 data 中的每个 ID 重复。


使用dplyr:

set.seed(1)
data %>%
  dplyr::group_by(ID) %>% 
  dplyr::mutate(New_Treatment = sample(c("a", "b", "c"), size = 1))

      ID Treatment New_Treatment
   <dbl> <chr>     <chr>        
 1     1 a         a            
 2     1 a         a            
 3     1 a         a            
 4     2 b         c            
 5     2 b         c            
 6     2 b         c            
 7     2 b         c            
 8     2 b         c            
 9     3 c         a            
10     3 c         a            
11     4 a         b            
12     4 a         b            
13     4 a         b            
14     4 a         b            
15     5 b         a            
16     6 c         c            
17     6 c         c            
18     6 c         c            
19     7 a         c            
20     7 a         c