2014-09-03 106 views
1

我有一个data.frame(质心),其中包含虚拟三维空间(列= AV,V和A),每个代表一个字符(列=字符)的点。每行包含不同的字符。计算3点的欧几里德距离

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)) 

但并不成功,因为这只是给在控制台中大印刷。任何援助将不胜感激。

+1

你需要开始学习如何创建矢量和矩阵,并学习R中的不同数据类型。有一个称为“data.frame”的数据结构,但不包含“dataframe”。如果你想要一个数字向量,可以使用'c(37.9,10.87,40.05)'; '“37.9,10.87,40.05”'是长度为1的字符向量。这些小的语法细节很重要。 – 2014-09-03 06:56:54

+0

@RichieCotton谢谢你,我会编辑我的问题,以更好地反映我的data.frame的结构。我是R和SO的新用户,对我的问题的糟糕结构表示歉意。 – user2716568 2014-09-03 06:58:44

回答

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 

目前尚不清楚你的意思是什么“性格< C(A,A,B)”

+0

谢谢你的回答。 “字符”列包含大小写字符的混合,对应于每行3个点的集合。 例如,a是37.9,1,07和0.04。 我想知道每个字符之间的区别。我将在我原来的问题中澄清这一点。 – user2716568 2014-09-03 08:52:42

+0

尝试将'centroid'创建为'centroid = data.frame(AV,V,A,row.names = Character)'(或可能是'centroid < - cbind(AV,V,A); rownames(centroid)< - Character ')。 – 2014-09-07 05:10:35

+0

@RichieCotton感谢您的帮助,完美的工作。 – user2716568 2014-09-19 00:07:20