【问题标题】:N'th minimum pair from dist function来自 dist 函数的第 N 个最小对
【发布时间】:2017-04-26 14:45:57
【问题描述】:

假设我有以下数据集:

dt<-data.frame(X=sample(4),Y=sample(4))

当我用它运行 dist 时

dist(dt, method = "euclidean")

它给了我一个像这样的矩阵:

         1        2        3
2 3.162278                  
3 2.236068 3.605551         
4 2.236068 2.236068 1.414214

我需要知道,第 N 个最小对是什么

例如,第一个最小对是:(1,3),距离为1.414214 第二对是 (2,4) 和 (1,4) 与 2.236068 等等 .... 那么,我怎样才能拥有这个功能呢?

【问题讨论】:

  • 我不知道如何使用set.seed(),但我会阅读并更新我的问题

标签: r


【解决方案1】:

您想按条目拆分行/列索引:

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] 进行提取,以获得第三个最小值的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2021-03-04
    • 2017-08-01
    • 2019-05-23
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多