【问题标题】:calculating the euclidean dist between each row of a dataframe with all other rows in another dataframe, but out put should be which row计算数据帧的每一行与另一个数据帧中的所有其他行之间的欧几里得距离,但输出应该是哪一行
【发布时间】:2015-11-12 15:14:06
【问题描述】:

我也有类似的情况: calculating the euclidean dist between each row of a dataframe with all other rows in another dataframe

所以,我有两个数据框,x 和 y。我想计算 x 的每一行和 y 的每一行之间的欧几里得距离,但我有兴趣获得 x 的每一行,其中 y 的行具有最小距离,因为我想根据行的距离对 x 的行进行聚类y (x 有例如 10 行,y 有例如 4 行)。 所以我的输出应该是这样的: 1 2 2 4 3 3 2 2 1 4 即 x 的第一行最接近 y 的第一行,以此类推。 我正在编写 kmeans 聚类算法。 我对 R 很陌生,可以使用一些帮助。 谢谢

【问题讨论】:

    标签: r euclidean-distance


    【解决方案1】:

    您发布的问题的公认解决方案是:

    unlist(lapply(seq_len(nrow(y)), function(i) min(sqrt(colSums((y[i, ] - t(x))^2)))))
    

    要更改它以获取索引而不是值,请将min 更改为which.min,这应该会返回您正在寻找的输出:

    unlist(lapply(seq_len(nrow(y)), function(i) which.min(sqrt(colSums((y[i, ] - t(x))^2)))))
    

    【讨论】:

    • 您的索引指的是第二个数据框y 的元素,说明第一个数据框x 的哪个元素最接近y 的第一个、第二个...元素.我认为应该反过来。可以只切换数据帧
    猜你喜欢
    • 2014-04-09
    • 2020-06-19
    • 2018-05-26
    • 2021-01-23
    • 2018-09-27
    • 1970-01-01
    • 2017-09-23
    • 2019-10-01
    相关资源
    最近更新 更多