我目前有一个包含16个观测值的数据集。我有二元治疗任务(目前有8个对照,8个治疗)。我需要为该数据集导出所有可能的不同处理分配,这些分配仍以8个对照和8个处理结束。我目前正在为16个观察值生成0和1的所有可能排列,并为8个对照或8种处理过滤。不幸的是,如果我需要进行26次以上的观察(我相信是幻数),那么数据帧对于R来说太大了。有什么方法可以创建一个置换表,而又省去了复制所有可能性并将其过滤到表格中的麻烦。中间,如下面的代码所示。
library(tidyverse)
library(random)
library(data.table)
test <- tibble("obs"=1:16,
"treatment"=c(rep(0,8),rep(1,8)),
"outcome"=randomNumbers(x,0,50,1))
treated <- sum(test$treatment)
perm <- do.call(CJ, replicate(16,0:1, FALSE))
perm <- perm %>% mutate(check=rowSums(perm)) %>% filter(., check == treated)
perm$check <- NULL
perm <- as_tibble(transpose(perm))
答案 0 :(得分:1)
8×12870 co
矩阵的列是对治疗组的可能分配,其余项目则分配给对照。这里的12870等于choose(16, 8)
,即从16个项目中选择8个项目的方式数量。
co <- combn(16, 8)
例如,co[, 1]
是1、2、3、4、5、6、7、8,因此如果选择了该列,则将前8个项目分配给治疗组,而后8个是控件。