【问题标题】:How to create a matrix in r using product of all possible two column combination? [closed]如何使用所有可能的两列组合的乘积在 r 中创建矩阵? [关闭]
【发布时间】:2016-03-16 18:26:46
【问题描述】:

我想创建一个矩阵,其中包含所有可能的两列组合的乘积。假设矩阵有 6 列 4 行,那么我的输出矩阵有 15 列和 4 行。

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    combn 有一个 FUN 选项。所以,我们可以直接传递combn里面的函数。 (以@RHertel 为例)

    combn(n_col,2, FUN=function(x) x[1]*x[2])
    #[1]  2  3  4  5  6  6  8 10 12 12 15 18 20 24 30
    

    或者不使用匿名函数,可以调用prod

    combn(n_col,2, FUN=prod)
    #[1]  2  3  4  5  6  6  8 10 12 12 15 18 20 24 30
    

    【讨论】:

    • 非常感谢。
    【解决方案2】:

    假设你的原始矩阵是df

    列组合

    cols <- combn(ncol(df), 2, simplify=F, FUN=as.numeric)
    

    获取产品并准备输出data.frame

    cbind.data.frame(
        lapply(cols, function(x){
            apply(df[, x], 1, prod)
        })
    )
    

    【讨论】:

    • @rxk011 这是一个anonymous function
    • 是的,正如@rxk011 所说,它是一个匿名函数,只是弥补了 lapply。如果你喜欢,你可以使用 for 循环
    • 非常感谢。
    【解决方案3】:

    这是一种可能性:

    n_col <- 6
    t(as.matrix(combn(n_col,2)[1,]*combn(n_col,2)[2,]))
    #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
    #[1,]    2    3    4    5    6    6    8   10   12    12    15    18    20    24    30
    

    或者您可以使用 matrixStats 包中的 colProds 函数来乘以列:

    library(matrixStats)
    n_col <- 6
    t(as.matrix(colProds(combn(n_col,2))))
    

    【讨论】:

    • @rxk011 我不明白这种情况下的预期输出是什么。所有两列产品组合都包含在答案中。结果仅取决于列数,而不取决于行数。您希望为每一行复制此输出吗?
    • @rxk011 抱歉,我还是不明白。无论如何,您所描述的情况似乎与您最初的问题有很大不同。如果原始问题的答案对您没有帮助,我建议您提出一个新问题,以便澄清预期的输出。
    • 感谢您的 cmets。很抱歉造成混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多