make.unique用于样本ID

问题描述 投票:2回答:2

我正试图提出一种分配一些治疗ID的快速方法,...老实说,我现在可以在纸上更快地做到这一点,但是我已经越过界限直到无法解决为止。

我想制作一个包含35行的表-每行将包含一个带有9个数字的向量(介于1和12之间,但每个行都必须是唯一的。

我尝试了突然出现的快速解决方案:

data.frame(replicate(9,sample(1:12,35, rep = TRUE)))

但是这显然对我不起作用,因为“ rep = TRUE”,而“ rep = FALSE”由于样本池(1:12)而无法正常工作。有没有添加make.unique的方法?

谢谢!

r dataframe sample
2个回答
1
投票

可能有更聪明的方法来解决这个问题,但是一种相对失败的安全方法是生成比需要的行数更多,然后简单地获取前X unique()行。构建您的代码:

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

reprex package(v0.3.0)在2019-10-07创建


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), ]
© www.soinside.com 2019 - 2024. All rights reserved.