如何使用所有可能的两列组合的产品在r中创建矩阵?

时间:2016-03-16 18:26:46

标签: r matrix

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这是一种可能性:

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))))

答案 2 :(得分:1)

假设您的原始矩阵为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)
    })
)