计算3对点的欧氏距离?

时间:2014-11-19 06:45:27

标签: r euclidean-distance

我的数据

我有一个矩阵Median,在虚拟3D空间中包含三个品质Speed, Angle & Acceleration。每组素质都属于一个人,称为Class

Speed<-c(18,21,25,19)
Angle<-c(90,45,90,120)
Acceleration<-c(4,5,9,4)
Class<-c("Nigel","Paul","Kelly","Steve")

Median = data.frame(Class,Speed,Angle,Acceleration)
mm = as.matrix(Median)

在上面的示例中,Nigel的SpeedAngleAcceleration品质将是(18,90,4)

我的问题

我想知道每个人/班级之间的欧几里德距离。例如,奈杰尔和保罗,奈杰尔和凯利等之间的欧氏距离。然后,我希望通过层次聚类在树形图中显示结果。

我(非常成功)尝试了什么

我首先使用hc = hclust(dist(mm))然后使用plot(hc),但这只会导致Speed的树形图。似乎函数pdist()可以计算两个观测矩阵之间的距离,但我有三个矩阵。这可能在R?我是该语言的新手,并在MATLAB中找到了类似的问题Calculating Euclidean distance of pairs of 3D points in matlab但是我如何用R代码编写它?

非常感谢。

1 个答案:

答案 0 :(得分:1)

当您将data.frame转换为矩阵时,所有值都会变成字符,我不认为这就是您想要的...(此外,您正在尝试使用&#计算距离) 34; class&#34;将名称作为变量之一...)

最好的方法是把你的&#34; Class&#34;作为row.names,然后计算距离和hclust

mm<-Median[,-1]
row.names(mm)<-Median[,1]

然后你可以用

计算Class之间的欧氏距离

dist(mm,method="euclidean")

> dist(mm,method="euclidean")
          Nigel      Paul     Kelly
Paul  45.110974                    
Kelly  8.602325 45.354162          
Steve 30.016662 75.033326 31.000000

最后,执行分层分类:

hac<-hclust(dist(mm,method="euclidean"))

plot(hac,hang=-1)显示树形图。