2014-03-18 208 views
0

我有成對的距離,我需要顯示/轉換成距離矩陣。 R應該有一個功能,但我不知道哪一個或如何使用相同。我的數據看起來像下面將成對距離轉換成距離矩陣R

A1 A1 0.90 
A1 B1 0.85 
A1 C1 0.45 
A1 D1 0.96 
B1 B1 0.90 
B1 C1 0.85 
B1 D1 0.56 
C1 C1 0.55 
C1 D1 0.45 
D1 D1 0.90 

我想轉換/顯示它下面

 A1  B1  C1  D1 
A1 0.90 0.85 0.45 0.96 
B1   0.90 0.85 0.56 
C1     0.55 0.45 
D1       0.90 

我應該怎麼辦?由於

+3

也許操縱的'xtabs'輸出?? 'xtabs(DF [,3]〜DF [,1] + DF [,2])' –

+0

@alexis_laz - 這應該是一個答案。 'as.table'中的例子說明:'xtabs()<-> as.data.frame.table()' – thelatemail

回答

2

你可以使用reshape

df <- read.table(textConnection(" 
A1 A1 0.90 
A1 B1 0.85 
A1 C1 0.45 
A1 D1 0.96 
B1 B1 0.90 
B1 C1 0.85 
B1 D1 0.56 
C1 C1 0.55 
C1 D1 0.45 
D1 D1 0.90")) 

dfr <- reshape(df, direction="wide", idvar="V2", timevar="V1") 
dfr 
# V2 V3.A1 V3.B1 V3.C1 V3.D1 
# 1 A1 0.90 NA NA NA 
# 2 B1 0.85 0.90 NA NA 
# 3 C1 0.45 0.85 0.55 NA 
# 4 D1 0.96 0.56 0.45 0.9 

d <- as.dist(dfr[, -1]) 
d 
#  1 2 3 
# 2 0.85   
# 3 0.45 0.85  
# 4 0.96 0.56 0.45 

# reset labels 
attr(d, "Labels") <- dfr[, 1] 
d 
#  A1 B1 C1 
# B1 0.85   
# C1 0.45 0.85  
# D1 0.96 0.56 0.45 

通過@alexis_laz提到的解決方案似乎更優雅:

as.dist(xtabs(df[, 3] ~ df[, 2] + df[, 1])) 
#  A1 B1 C1 
# B1 0.85   
# C1 0.45 0.85  
# D1 0.96 0.56 0.45 
+0

但是,如何獲取標籤而不是1,2,3? – user45270

+0

請參閱我的編輯。順便說一句,我真的很喜歡@alexis_laz的解決方案。 – sgibb

+0

是的! xtabs解決方案起作用。但我也想要A1,B1,C1和D1值。那就是A1-A1,B1-B1等等。我如何獲得這些表格? – user45270