假设我有以下数据集:
| 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
等等 ....
那么,我该如何使用此功能?
答案 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,在那里你还可以学习下三角矩阵的基础知识。