我需要显示/转换成距离矩阵的成对距离。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
我应该怎么办?谢谢
您可以使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句