我正在为实验随机分配治疗方法。我有四个站点(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