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

Wer*_*ner 6 r distance matrix

给定矩阵

     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
Run Code Online (Sandbox Code Playgroud)

我想创建一个距离矩阵,其中包含每列每行之间的绝对平均差异.例如,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")
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ien 5

这是一个单线解决方案.它利用了dist()自己的method论证来计算你的data.frame中每对列之间的L1范数,即城市街区距离,即曼哈顿距离.

as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df))
Run Code Online (Sandbox Code Playgroud)

为了使其可重复:

df <- read.table(text="
 X1 X2 X3 X4 X5
  1  2  3  2  1
  2  3  4  4  3
  3  4  4  6  2
  4  5  5  5  4
  2  3  3  3  6
  5  6  2  8  4", header=T)

dmat <- as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df))
print(dmat, digits=3)
#      1     2     3    4     5    6
# 1 0.00 1.167 1.667 2.33 1.333 3.00
# 2 1.17 0.000 0.833 1.17 0.833 2.17
# 3 1.67 0.833 0.000 1.00 1.667 1.67
# 4 2.33 1.167 1.000 0.00 1.667 1.33
# 5 1.33 0.833 1.667 1.67 0.000 2.33
# 6 3.00 2.167 1.667 1.33 2.333 0.00
Run Code Online (Sandbox Code Playgroud)