将成对距离转换为R中的距离matrix

我有成对的距离,我需要显示/转换成距离matrix。 R应该有一个function,但我不知道哪一个或如何使用相同的。 我的数据如下所示

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 

我该怎么办? 谢谢

你可以使用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提到的解决scheme似乎更优雅:

 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