gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:14:18 28 4
gpt4 key购买 nike

给定矩阵,

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)
我想创建一个距离矩阵,其中包含每列每行之间的绝对平均差。例如 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()以这种方式在 vegan 包中起作用:
designdist(t(df), method = "abs(A-B)/6", terms = "minimum")
第 1 列和第 3 列的结果距离为 0.666。这个函数的问题在于它对每列中的所有值求和然后减去它们。但是我需要对每行之间的绝对差异(单独,绝对)求和,然后将其除以 N。

最佳答案

这是一个单行解决方案。它利用了 dist()method计算 L1 norm aka city block distance aka Manhattan distance 的参数在 data.frame 中的每对列之间。

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

为了使其可重现:
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

关于r - 如何创建包含每行之间的平均绝对分数的距离矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10707260/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com