2014-09-03 147 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