首页 > 解决方案 > R - 为两个向量的元素创建随机组合

问题描述

a <- rnorm(10)

b <- sample(a,18,replace = T)

对于 的每个元素a,我想从 vector 中随机分配一个值b。这样我将对向量“a”的所有元素进行组合。它会是这样的:

combinations <- data.table(first=a ,second=sample(b,length(a)))

我真正想要的与 data.table 有点不同combinations。我想获得一组组合,其中非行具有重复值。

编辑:combinations$first[i] 和combinations$second[i] 在上面的代码中可能相等。我想要的是让组合$first[i] 和combinations$second[i] 相等的情况变得不可能。

注意:我会为大型矢量执行此操作,因此它需要快速。

标签: rvectorrandomcombinations

解决方案


您可以按如下方式按组采样

library(data.table)
set.seed(0L)
a <- LETTERS[1L:10L]
output <- data.table(first=a)[, .(second=sample(setdiff(a, first), .N)), by=.(first)]

如果需要随机行排序,您可以运行output[sample(.N)].

输出:

    first second
 1:     A      J
 2:     B      D
 3:     C      E
 4:     D      G
 5:     E      J
 6:     F      B
 7:     G      J
 8:     H      J
 9:     I      F
10:     J      F

推荐阅读