给定矩阵
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.67abs(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.
答案 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))