2016-07-12 6 views
0

ユークリッド距離に基づいて、ポイントが属するクラスターを計算したい。ユークリッド距離に基づいて場所にクラスターを割り当てる

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

ここ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)); 
関連する問題