r-将治疗随机分配给一组的一半



我正在为实验随机分配治疗方法。我有四个站点(Site1,…Site4(,其中12个实验单元(例如1…12(被复制四次(例如1..4(。对于每个重复,我随机分配了三种处理中的一种(例如,trt1…trt3(

我现在需要为我的每个站点的Replicate中的每个治疗分配一个SecondTreatment(是或否(。trt2应该总是"y",而我想随机将"y"分配给trt1的一半,将"n"分配给另一半,然后对trt3执行同样的操作。应该为每个Replicate提供:trt2带4"y",trt1带2"n",trt3带3"n"。

我的数据如下:

Site      Experimental unit     Replicate   Treatment        SecondTreatmentAssign (y/n)
Site1              1                1         trt1  
Site1              2                1         trt2  
Site1              3                1         trt3  
Site1              4                1         trt3  
Site1              5                1         trt1  
Site1              6                1         trt2  
Site1              7                1         trt3  
Site1              8                1         trt2  
Site1              9                1         trt1  
Site1              10               1         trt1  
Site1              11               1         trt3  
Site1              12               1         trt2  
Site1              1                2         trt2  
Site1              2                2         trt3  
Site1              3                2         trt1  
Site1              4                2         trt2  
Site1              5                2         trt1  
Site1              6                2         trt3  
Site1              7                2         trt2  
Site1              8                2         trt2         
Site1              9                2         trt1  
Site1              10               2         trt2  
Site1              11               2         trt1  
Site1              12               2         trt3      
Site1              1                3         trt2  
Site1              2                3         trt1  
Site1              3                3         trt3  
Site1              4                3         trt3  
Site1              5                3         trt2  
Site1              6                3         trt1  
Site1              7                3         trt3  
Site1              8                3         trt2  
Site1              9                3         trt1  
Site1              10               3         trt1  
Site1              11               3         trt3  
Site1              12               3         trt2  
Site1              1                4         trt3  
Site1              2                4         trt2  
Site1              3                4         trt1  
Site1              4                4         trt3  
Site1              5                4         trt2  
Site1              6                4         trt1  
Site1              7                4         trt3  
Site1              8                4         trt1  
Site1              9                4         trt2  
Site1              10               4         trt1  
Site1              11               4         trt2  
Site1              12               4         trt3
.                .                .           .
.                .                .           .
.                .                .           .
Site4              12               4         trt1  

我希望能够以一种将这些分配返回到数据帧中的方式来完成这项工作,这样我就不必手动移动任何东西。我仍然是编程的新手,不知道如何做到这一点。

谢谢!

我会这样做:

library(dplyr) 
data %>% 
arrange(runif(n())) %>% # randomize the order
group_by(Site, Replicate, Treatment) %>% # group
mutate(
Treat_2 = case_when(
Treatment == "trt2" ~ "y", # trt2 gets 'y'
row_number() <= n() / 2 ~ "y", # others in the first half get "y"
TRUE ~ "n" # others in the second half get "n"
)) %>%
arrange(Site, Replicate, `Experimental unit`) ## return to original order

相关内容

  • 没有找到相关文章