R代码创建自定义相似性类型矩阵

时间:2014-07-09 19:33:27

标签: r algorithm matrix

这适用于所有R大师:

我想创建一个函数,找到矩阵中一列和另一列的相同观察值之间的最小值。然后必须将所有这些最小值相加并将答案放入新的矩阵中。这应该在原始矩阵的所有列之间完成。

换句话说,我从一个n个观察(行)和m个变量的矩阵开始。然后对于第1列和第2列,我想找到每对观察值之间的最小值,然后将最小值相加以得到答案。这必须在第一列和每隔一列之间连续进行。然后在第二列和每隔一列之间等。就像一种相似性矩阵一样。

我附上了我想要实现的公式的图像(用于在列j和列k之间观察i)。任何帮助,将不胜感激!!! (希望你理解,我发现很难正确解释)Formula to be implemented in R

1 个答案:

答案 0 :(得分:0)

如果你给出一个示例数据集和所需的输出,我们会更容易帮助你,但这是我对它的看法:

mat <- matrix(sample(1:12),nrow = 4)
colnames(mat) <- c("v1","v2","v3")
mat
     v1 v2 v3
[1,]  8  4  1
[2,]  5 12  6
[3,] 10  2 11
[4,]  9  7  3

minsum <- function(c1,c2) sum(apply(mat[,c(c1,c2)],1,min))

outer(1:ncol(mat),1:ncol(mat),Vectorize(minsum))

     [,1] [,2] [,3]
[1,]   32   18   19
[2,]   18   25   12
[3,]   19   12   21

非对角线是您的公式/算法的结果,对角线是列总和。