我想将每个子组的一半分配给治疗条件,一半分配给对照组。当我的子组有奇数个记录时,可以任意分配最后一个。
我正在尝试在 dplyr 组中执行此操作并努力解决奇数/偶数。我试过这个:
set.seed(1)
library(dplyr)
mtcars %>%
group_by(cyl) %>%
mutate(group = case_when(
n() %% 2 == 0 ~ sample(rep(c("treatment", "control"), n() / 2)),
TRUE ~ sample(rep(c("treatment", "control"), ceiling(n() / 2)))[-1]
))
但我收到错误:
如果这种方法更简单,我也愿意使用
purrr
。 最佳答案
mtcars %>%
group_by(cyl) %>%
mutate(group = sample(rep(c("treatment", "control"), ceiling(n()/2)), n()))
n = 2k
行,它会打乱 k
"treatment"和 k
"control"值。 n = 2k + 1
,它从 2k + 1
“treatment” 和 k + 1
“control” 值中采样 k + 1
值。我相信这就是你所需要的。 这当然可以推广到任意数量的组:
mtcars %>%
group_by(cyl) %>%
mutate(group = sample(rep(c("A", "B", "C"), ceiling(n()/3)), n())) %>%
count(cyl, group)
关于不同规模的亚组内的随机化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58647807/