根据欧几里得距离将集群分配到位置
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));
我想根据欧氏距离计算一个点属于哪个簇。
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));