gpt4 book ai didi

r - 对 dist() 的输出进行排序

转载 作者:行者123 更新时间:2023-12-02 03:03:45 24 4
gpt4 key购买 nike

我有一个矩阵m

m <- matrix ( 
c( 2, 1, 8, 5,
7, 6, 3, 4,
9, 3, 2, 8,
1, 3, 7, 4),
nrow = 4,
ncol = 4,
byrow = TRUE)

rownames(m) <- c('A', 'B', 'C', 'D')

现在,我想根据 m 的行各自的距离进行排序,因此我使用 dist()

dist_m <- dist(m)

dist_m 是打印时的

          A         B         C
B 8.717798
C 9.899495 5.477226
D 2.645751 7.810250 10.246951

因为我想订购它,所以我尝试打印 sort(dist_m)

[1]  2.645751  5.477226  7.810250  8.717798  9.899495 10.246951

这几乎就是我想要的。但如果它还打印出两行的名称(其中数字是距离),我会更高兴,例如

 2.645751  A  D
5.477226 B C
7.810250 B D
8.717798 A B
9.899495 A C
10.246951 C D

这当然是可能的,但我不知道如何实现这一点。

最佳答案

一种选择是将dist转换为矩阵,将上三角值替换为0、meltsubset 非零值,然后根据“值”列进行排序

m1 <- as.matrix(dist_m)
m1[upper.tri(m1)] <- 0
library(reshape2)
m2 <- subset(melt(m1), value!=0)
m2[order(m2$value),3:1]
# value Var2 Var1
#4 2.645751 A D
#7 5.477226 B C
#8 7.810250 B D
#2 8.717798 A B
#3 9.899495 A C
#12 10.246951 C D

或者@David Arenburg在获得“m1”后建议的base R选项

 m2 <- cbind(which(m1!=0, arr.ind=TRUE), value= m1[m1!=0])
m2[order(m2[,'value']),]

关于r - 对 dist() 的输出进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com