如何创建包含每行之间平均绝对分数的距离矩阵?

时间:2012-05-22 17:47:59

标签: r matrix distance

给定矩阵

     X1 X2 X3 X4 X5
[1,]  1  2  3  2  1
[2,]  2  3  4  4  3
[3,]  3  4  4  6  2
[4,]  4  5  5  5  4
[5,]  2  3  3  3  6
[6,]  5  6  2  8  4

我想创建一个距离矩阵,其中包含每列每行之间的绝对平均差异。例如,假设:

,X1和X3之间的距离应为= 1.67

abs(1 - 3)+ abs(2-4)+ abs(3-4)+ abs(4-5)+ abs(2-3)+ abs(5-2)= 10/6 = 1.67

我已经尝试过使用纯素包中的designdist函数:

designdist(t(test), method = "abs(A-B)/6", terms = "minimum")

第1列和第3列的最终距离为0.666。这个函数的问题是它将每列中的所有值相加,然后减去它们。但我需要将每一行之间的绝对差值(单独,绝对)相加,然后除以N.

1 个答案:

答案 0 :(得分:5)

这是一个单线解决方案。它利用dist()的{​​{1}}参数来计算data.frame中每对列之间的L1 norm aka city block distance aka Manhattan distance

method

使其可重现:

as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df))