r - N=50 和 K=3 的所有不同组合

标签 r combinations permutation

如何在 R 中创建一个矩阵,其中包含 50 个人,其标签为 K=1,2,3,然后是所有可能的结果?它似乎既不是组合也不是排列。 因此,作为下面 N=2 的示例,只有 50 行而不是 2 行。 所以我得到一个 50x3^50 矩阵。

> cbind(c(1,1),c(1,2),c(1,3),c(2,1),c(2,2),c(2,3),c(3,1),c(3,2),c(3,3))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    1    1    2    2    2    3    3    3
[2,]    1    2    3    1    2    3    1    2    3

对于 N=3:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27]
[1,]    1    1    1    1    1    1    1    1    1     2     2     2     2     2     2     2     2     2     3     3     3     3     3     3     3     3     3
[2,]    1    1    1    2    2    2    3    3    3     1     1     1     2     2     2     3     3     3     1     1     1     2     2     2     3     3     3
[3,]    1    2    3    1    2    3    1    2    3     1     2     3     1     2     3     1     2     3     1     2     3     1     2     3     1     2     3

最佳答案

这让你半途而废,但我认为你的定义可能存在实际问题。对于 N=50,您想要的听起来是不切实际的。

f <- function(n, K) {
    (replicate(n, 1:K, simplify = FALSE)  ## n copies of 1:K
        |> do.call(what = expand.grid)    ## pass these all to expand.grid
        |> as.matrix()                    ## convert to matrix
        |> t()                            ## transpose
    )
}

f(2)f(3) 看起来像上面的示例。然而...

  • f(2) 为 2 x 9(即 2 x K^2)
  • f(3) 为 3 x 27(3 x K^3)
  • f(4) 为 4 x 81(3 x K^4)

...所以如果我们继续这样下去,N=50 的结果将不是 50 x 50^2 而是 N x K^N = 50 x 3^50,即 3.5 x 10^25 .. .

...所以您可能需要重新考虑您的策略。 (50^3 可以,但 3^50 不行!)

关于r - N=50 和 K=3 的所有不同组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72722448/

相关文章:

r - 如何读取指定值上方和下方的行

r - 对每一列应用一个函数

html - 如何防止 splitLayout、Shiny、R 中两个输入标签重叠?

Python 组合字典中的项目

java - 部分和永远不会达到给定值的整数序列的排列

r - 在 R 中的数据框中将 NA 转换为数字的问题

javascript - 计算一系列的所有组合

julia - 在 Julia 中为一系列组合初始化一个空数组

python - 使用生成器生成排列

算法——找出字符串a在字符串b中的所有排列