【问题标题】:Calculate the Euclidean distance of 3 points计算3个点的欧几里得距离
【发布时间】:2014-10-27 13:40:08
【问题描述】:

我有一个 data.frame(质心),其中包含虚拟 3D 空间中的点(列 = AV、V 和 A),每个点代表一个字符(列 = 字符)。每行包含一个不同的字符。

AV<-c(37.9,10.87,40.05)
V<-c(1.07,1.14,1.9)
A<-c(0.04,-1.23,-1.1)
Character<-c("a","A","b")

centroid = data.frame(AV,V,A,Character)
centroid
     AV    V     A Character
1 37.90 1.07  0.04         a
2 10.87 1.14 -1.23         A
3 40.05 1.90 -1.10         b

我想知道每个角色之间的相似性/不同之处。例如,“a”对应于 37.9、1.07 和 0.04,而“A”对应于 10.87、1.14、-1.23。我想知道这些字符之间的距离/ 3个点。

我相信我可以使用每个字符之间的欧几里得距离来计算这个,但不确定要运行的代码。

我尝试过使用

dist(as.matrix(Centroids))   

但是没有成功,因为这只是在控制台中打印了一个大字。任何帮助将不胜感激。

【问题讨论】:

  • 你需要从学习如何创建向量和矩阵开始,学习R中不同的数据类型。有一个数据结构叫做data.frame,但没有dataframe。如果您想要一个数字向量,请使用 c(37.9,10.87,40.05) 之类的东西; "37.9,10.87,40.05" 是长度为 1 的字符向量。这些小的语法细节很重要。
  • @RichieCotton 谢谢,我将编辑我的问题以更好地反映我的 data.frame 的结构。我是 R 和 SO 的新用户,对我的问题结构不佳表示歉意。

标签: r euclidean-distance


【解决方案1】:

以下可能会有所帮助:

AV<-c(37.9,10.87,40.05)
V<-c(1.07,1.14,1.9)
A<-c(0.04,-1.23,-1.1)
centroid = data.frame(A,V,AV)
centroid
      A    V    AV
1  0.04 1.07 37.90
2 -1.23 1.14 10.87
3 -1.10 1.90 40.05

mm = as.matrix(centroid)
mm
         A    V    AV
[1,]  0.04 1.07 37.90
[2,] -1.23 1.14 10.87
[3,] -1.10 1.90 40.05

dist(mm)
          1         2
2 27.059909          
3  2.571186 29.190185

as.dist(mm)
       A     V
V  -1.23      
AV -1.10  1.90

不清楚你所说的“字符

【讨论】:

  • 感谢您的回答。 “字符”列包含大小写字符的混合,对应于每行中 3 个点的集合。例如,a 是 37.9、1,07 和 0.04。我想知道每个角色之间的区别。我将在我原来的问题中澄清这一点。
  • 尝试将centroid 创建为centroid = data.frame(AV,V,A,row.names = Character)(或者可能是centroid &lt;- cbind(AV,V,A); rownames(centroid) &lt;- Character)。
  • @RichieCotton 感谢您的帮助,效果很好。
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 2020-11-29
  • 2018-02-14
  • 2013-04-07
  • 2021-01-31
  • 2015-09-23
  • 1970-01-01
相关资源
最近更新 更多