根据欧几里得距离将集群分配到位置

Assign clusters to locations, based on the euclidean distance

我想根据欧氏距离计算一个点属于哪个簇。

clusters    xcor       ycor
1           64.99206   78.48413
2           1102.00000 2466.67500
3           1598.11060 1298.10138
4           499.86441  736.72881

位置是:

location   xcor   ycor
1          511    78
2          1354   2466
3          511    1298

所以它应该根据最短距离检查所有位置,它属于哪个集群。 是否有一个 function/package 可以轻松执行此操作?

这是一个使用 apply() and which.min() 的解决方案:

apply(locs,1L,function(x) which.min(sqrt((x['xcor']-clus$xcor)^2+(x['ycor']-clus$ycor)^2)));
## [1] 1 2 4

数据

locs <- data.frame(location=c(1L,2L,3L),xcor=c(511L,1354L,511L),ycor=c(78L,2466L,1298L));
clus <- data.frame(clusters=c(1L,2L,3L,4L),xcor=c(64.99206,1102,1598.1106,499.86441),ycor=c(
78.48413,2466.675,1298.10138,736.72881));