来自dist函数的N'最小对

时间:2017-04-26 14:45:57

标签: r

假设我有以下数据集:

| city | day | hour |  
+------+-----+------+ 
|    1 |  12 |   00 |

当我用

运行dist时
dt<-data.frame(X=sample(4),Y=sample(4))
它给了我一个矩阵:

dist(dt, method = "euclidean")

我需要知道, N&N的最小对

例如,第一个最小对是:(1,3)距离为 1 2 3 2 3.162278 3 2.236068 3.605551 4 2.236068 2.236068 1.414214 第二对是(2,4),(1,4)和2.236068 等等 .... 那么,我该如何使用此功能?

1 个答案:

答案 0 :(得分:2)

您希望按条目分割行/列索引:

n <- nrow(dt) - 1
j <- rep.int(1:n, n:1)    # column number
i <- j + sequence(n:1)    # row number
x <- dist(dt)
loc <- data.frame(i, j)
pair <- split(loc, x)

有时强制执行因子级别是个好主意:

lev <- sort(unique(x))
pair <- split(loc, factor(x, lev))

<强>其它

我上面的解决方案很耗尽,因为即使你想要最小的索引,它也会返回一个完整的列表。例如,您可以通过pair[3]进行提取,以获得第3个最小值的结果。

虽然这本身就很有趣,但如果你总是希望将结果输入一个条目并丢弃其余条目,则效率很低。我对这个问题的回答可以帮助你:R - How to get row & column subscripts of matched elements from a distance matrix,在那里你还可以学习下三角矩阵的基础知识。