我有一个大矩阵,其中一部分看起来像这样:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 3 10 7 6
[2,] 3 0 9 4 11
[3,] 10 9 0 8 15
[4,] 7 4 8 0 16
[5,] 6 11 15 16 0
每个列/行代表一个城市,相应的数字告诉您它们之间的距离。
我想找到最接近每个城市的三个城市。
我写了
apply(Matrix,1,order)
查找订单,但不确定如何从中提取最近的城市。
因此,对于每个城市,比如称为1,2,3,4,5,我希望它返回
[1] 1, 2, 5
[2] 1, 2, 4
[3] 2, 3, 4
[4] 1, 2, 4
[5] 1, 2, 5
有人可以帮帮我吗?
答案 0 :(得分:0)
将apply
与order
一起使用是正确的。命令apply(mat, 1, order)
按列返回结果。您可以使用[seq(3), ]
提取前三个值。函数t
转置结果矩阵。
t(apply(mat, 1, order)[seq(3), ])
[,1] [,2] [,3]
[1,] 1 2 5
[2,] 2 1 4
[3,] 3 4 2
[4,] 4 2 1
[5,] 5 1 2
答案 1 :(得分:0)
library(reshape2)
pairwisecities <- melt(apply(mdat,1,order))
会为您提供成对排名,然后subset
pairwisecities
value <= 3
apply(mdat,1,rank)
会给你排名。