我想创建一个矩阵,其中包含所有可能的两列组合的乘积。假设,矩阵有6列4行,那么我的输出矩阵有15列和4行。
答案 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)
cbind.data.frame(
lapply(cols, function(x){
apply(df[, x], 1, prod)
})
)