【问题标题】:Possible arrangements of binary vectors keeping sum fixed in R二元向量的可能排列保持和固定在R中
【发布时间】:2014-12-19 03:16:09
【问题描述】:

假设我们有一个固定的行和矩阵(例如,MAT),维度为 3 x N,其(即行和)为 = (RS ,LS,NCS)'N 个列向量是未知的。 N 个列向量中的每一个都有 3 种可能的选择 - (1,0,0)'、(0,1,0)'、(0,0,1)'。

所以第一个问题是 -

我们如何通过使用 R 软件将行和固定为 (RS,LS,NCS)' 来获得该矩阵 MAT 的所有可能选择?

例如 - 取 N=7,RS=第一行的总和=2,LS=第二行的总和=2 和NCS=第三行的总和=3。所以 (1,0,0)' 将出现两次,(0,1,0)' 也将出现两次, (0,0,1)' 将在 N 列的集合中出现三次该矩阵MATMAT 的一种可能选择是 -

1 0 0 0 0 1 0

0 1 0 0 0 0 1

0 0 1 1 1 0 0

我认为通过将行总和固定为 (2,2,3)' 将有 7!/(2!x2!x3!)=210 个可能的 MAT 选择。

但是如何使用 R 软件获得那些可能的 MAT 选择?它应该是一个维度为 3xNxn 的数组,其中 nMAT 的可能选择数。

第二个问题是——

如果该矩阵 MAT 的每个 N 个列向量的可能选择变为 - (1,1,0),则上述问题的解决机制如何变化', (1,0,0)', (0,1,0)', (0,0,1)' ?

【问题讨论】:

    标签: r matrix statistics combinations permutation


    【解决方案1】:

    您可以使用iterpc 包。

    library(iterpc)
    
    foo = function(index){
        sapply(index, function(z){as.numeric(c(z==1,z==2,z==3))})
    }
    

    获取所有可能的矩阵

    I = iterpc(c(2,2,3), ordered=TRUE)
    M = getall(I)
    sapply(1:nrow(M), function(i) foo(M[i,]), simplify=FALSE)
    

    逐个获取矩阵

    I = iterpc(c(2,2,3), ordered=TRUE)
    foo(getnext(I))
    foo(getnext(I))
    foo(getnext(I))
    

    【讨论】:

    • 非常感谢伙计。对第二个问题有任何想法吗?
    • 对于某些行总和,您的第二个问题可能没有明确定义。例如,让a = c(1,1,0), x=c(1,0,0), y=c(0,1,0), z=c(0,0,1)。矩阵[a x y z] 和矩阵[x x y y z] 将产生相同的行和c(2,2,1)N 定义不明确,可能也很难得到所有的“组合”,更何况排列的另一层难度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2018-11-18
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多