将治疗随机分配给一组的一半
Random assignment of treatments to half of a group
我正在为实验随机分配处理方法。我有四个站点(Site1,... Site4),其中 12 个实验单元(例如,1 ... 12)被复制四次(例如,1 ... 4)。对于每个重复,我随机分配了三种处理方法之一(例如,trt1 ...trt3)。
我现在需要为我的每个站点的复制中的每个处理分配一个 SecondTreatment(是或否)。 trt2 应始终为 "y",而我想将 "y" 随机分配给 trt1 的一半,将 "n" 分配给 trt1 的另一半,然后对 trt3 执行相同的操作。应该为每个复制给我: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
我正在为实验随机分配处理方法。我有四个站点(Site1,... Site4),其中 12 个实验单元(例如,1 ... 12)被复制四次(例如,1 ... 4)。对于每个重复,我随机分配了三种处理方法之一(例如,trt1 ...trt3)。
我现在需要为我的每个站点的复制中的每个处理分配一个 SecondTreatment(是或否)。 trt2 应始终为 "y",而我想将 "y" 随机分配给 trt1 的一半,将 "n" 分配给 trt1 的另一半,然后对 trt3 执行相同的操作。应该为每个复制给我: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