【问题标题】:group rows (ID) and then assign a treatment for each group ID分组行 (ID),然后为每个组 ID 分配一个处理
【发布时间】:2021-05-06 00:19:54
【问题描述】:

我正在处理一个数量不平衡的长(人周期)数据集(每人的观察次数 N 不同)。我想要做的是为每个人(在新列中)的每一行/观察随机分配一个治疗(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 group-by plyr dplyr


    【解决方案1】:

    您可以使用基础Rmerge 来执行此操作:

    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      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多