首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建包含每行之间平均绝对分数的距离矩阵?

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

Stack Overflow用户
提问于 2012-05-22 17:47:58
回答 1查看 2.5K关注 0票数 7

考虑到矩阵,

代码语言:javascript
复制
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)

我想要创建一个距离矩阵,其中包含每列每一行之间的绝对平均差。例如,考虑到以下情况,X1X3之间的距离应该为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()函数的

代码语言:javascript
复制
designdist(t(df), method = "abs(A-B)/6", terms = "minimum")

第1列和第3列的结果距离为0.666。这个函数的问题是,它对每一列中的所有值进行求和,然后减去它们。但是我需要把每一行之间的绝对差异求和(个别的,绝对的),然后除以N。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 17:52:42

这里有一个单行解决方案。它利用dist()method参数计算data.frame中每一对列之间的L1范数城市街区距离又称曼哈顿距离

代码语言:javascript
复制
as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df))

为了使它可复制:

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10707260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档