这适用于所有R大师:
我想创建一个函数,找到矩阵中一列和另一列的相同观察值之间的最小值。然后必须将所有这些最小值相加并将答案放入新的矩阵中。这应该在原始矩阵的所有列之间完成。
换句话说,我从一个n个观察(行)和m个变量的矩阵开始。然后对于第1列和第2列,我想找到每对观察值之间的最小值,然后将最小值相加以得到答案。这必须在第一列和每隔一列之间连续进行。然后在第二列和每隔一列之间等。就像一种相似性矩阵一样。
我附上了我想要实现的公式的图像(用于在列j和列k之间观察i)。任何帮助,将不胜感激!!! (希望你理解,我发现很难正确解释)Formula to be implemented in R
答案 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
非对角线是您的公式/算法的结果,对角线是列总和。