我想基于欧氏距离来计算一个点所属的集群。
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
因此它应根据最短距离检查所有位置,它所属的群集。 是否有一个功能/包可以轻松预先形成这个?
答案 0 :(得分:0)
以下是使用apply()
和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));