我正在尝试想出一种快速分配一些治疗ID的方法,并且...老实说,我现在可以在纸上更快地做到这一点,但我已经越界了,在我弄清楚这一点之前我不能停下来。
我想制作一个包含 35 行的表格 - 每行将包含一个包含 9 个数字(介于 1 和 12 之间(的向量,但每一行都必须是唯一的。
我尝试了突然出现在我脑海中的快速解决方案:
data.frame(replicate(9,sample(1:12,35, rep = TRUE)))
但这显然对我不起作用,因为"rep=TRUE"和"rep=FALSE"由于样本池 (1:12( 而无法按编写方式工作。有没有办法添加make.unique来解决这个问题?
谢谢!
可能有更聪明的方法可以解决这个问题,但一种相对故障安全的方法是生成比您需要的更多的行,然后简单地获取前 Xunique()
行。构建代码:
set.seed(1)
x <- data.frame(replicate(9,sample(1:12,1e6, rep = TRUE)))
#how many rows did we make?
nrow(x)
#> [1] 1000000
#how many unique rows?
nrow(unique(x))
#> [1] 999906
#show the top two rows while showing how to get 35 rows total
head(unique(x)[1:35, ],2)
#> X1 X2 X3 X4 X5 X6 X7 X8 X9
#> 1 9 6 8 3 12 7 11 5 5
#> 2 4 1 8 11 12 11 11 7 6
创建于 2019-10-07 由 reprex 软件包 (v0.3.0(
假设你想要一个独特的组合,你可以使用combn
生成所有可能的组合,然后取 35 个随机行的sample
:
# all combos
x <- as.data.frame(t(combn(1:12, 9)))
# 35 random rows
x[sample(1:choose(12,9), 35), ]