【问题标题】:Permutation with different target vector?具有不同目标向量的排列?
【发布时间】:2017-10-06 02:37:09
【问题描述】:

我想知道当每个元素的目标向量不同时,是否有一种函数或最佳方式来生成所有可能的排列。这是我的例子: 来自 (a,b,c) 的第一个和第三个元素,以及来自 (a,b,c,d) 的第二个元素。我想要长度为 3 的排列(其中 36 个):

aaa, aab, aac, aad
aba, aca, baa, caa
bab, bac, bad, cab
cac, cad, cba, cbb,
cbc, cbd, cca, ccb,

。 . .

提前致谢,

【问题讨论】:

    标签: r permutation


    【解决方案1】:

    您可以使用不带by 参数的合并来生成所有可能的组合。

    v1 <- c("a","b","c")
    v2 <- c("a","b","c", "d")
    perm <- Reduce(function(...) merge(..., by =NULL), list(v1, v2, v1))
    perm
    # x y.x y.y
    # 1  a   a   a
    # 2  b   a   a
    # 3  c   a   a
    # 4  a   b   a
    # 5  b   b   a
    # 6  c   b   a
    # 7  a   c   a
    # 8  b   c   a
    # 9  c   c   a
    # 10 a   d   a
    # 11 b   d   a
    # 12 c   d   a
    # 13 a   a   b
    # 14 b   a   b
    # 15 c   a   b
    # 16 a   b   b
    # 17 b   b   b
    # 18 c   b   b
    # 19 a   c   b
    # 20 b   c   b
    # 21 c   c   b
    # 22 a   d   b
    # 23 b   d   b
    # 24 c   d   b
    # 25 a   a   c
    # 26 b   a   c
    # 27 c   a   c
    # 28 a   b   c
    # 29 b   b   c
    # 30 c   b   c
    # 31 a   c   c
    # 32 b   c   c
    # 33 c   c   c
    # 34 a   d   c
    # 35 b   d   c
    # 36 c   d   c
    

    【讨论】:

    • 非常感谢!如何更改它以返回长度为 2 和 1 的排列?这些合并和通过对我来说一直是个谜!如果我想生成所有排列,我更多地考虑排列和 lapply,作为我的返回值或不同长度,但排列不适用于不同的目标向量。
    • 您要排列 2 个向量还是检索上述排列的前两个字符?
    • 其实完全没问题!我的向量是 c("0","1","2") 和 ("0","1","2,"3"),我很困惑。非常感谢 emilliman5!
    • 将矩阵子集如下:perm[, 1:2]perm[, 1]。注意:我编辑了我的答案以将排列分配给perm
    【解决方案2】:

    您可以使用expand.grid() 执行此操作,如下所示:

    v1 <- c("a","b","c")
    v2 <- v1
    v3 <- v1
    

    vFull &lt;- expand.grid(v1,v2,v3)

    【讨论】:

    • 非常感谢。当 3 变为 10-12 时,我会检查这两种方法,看看哪一种更快。
    • 感谢 Mako212。这种方法更快!
    猜你喜欢
    • 2011-07-18
    • 2018-05-05
    • 1970-01-01
    • 2014-07-08
    • 2016-03-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多