2015-09-16 24 views
6

ちょうどRを学び始めていますが、プロジェクトは遅くなく早く完了したいと思います。それはむしろ単純です:私は、X座標とY座標からなるX列とY列を持っています。 (NAD27座標系での作業)。最初の座標から、データセット内の最も近いポイントを見つけて、次の座標に移動して、同じデータセット内の最も近いポイントを探したいと思います。理想的には、それは各点を通り、最も近い点を決定する。Rを使って最も近いX、Y座標を見つける

point x   y 
1  1601774 14544454 
2  1616574 14579422 
3  1608698 14572922 
4  1602948 14572990 
5  1607355 14573871 
6  1615336 14578178 
7  1603398 14574495 
8  1605153 14570727 
9  1606758 14573845 
10 1606655 14570953 
+3

ようこそスタックオーバーフロー!小さなサンプルデータセットを含めてください(私はNAD27座標系に精通していませんし、他の人もそうかもしれないと思います)。さらに、この操作を実行しようとしたコードを含めてください。 – josliber

+0

なぜマイナス点?それは良い質問です。彼に質問の編集を依頼してください。 – Soheil

+4

'sp :: spDists'や' rgeos :: gDistance'が助けなければなりませんが、まずいくつかのことを試す必要があります(人々は単にコードを書くつもりではありません) – hrbrmstr

答えて

7

これは、RANNパッケージを使用した1つの方法です。このアプローチはthis postに示されているものに類似していますが、1組の点に適合しています(リンクされた点は集合Aの最も近い点を集合Bの各点に近づけることでした)。上記

xy <- read.table(text='point x   y 
1  1601774 14544454 
2  1616574 14579422 
3  1608698 14572922 
4  1602948 14572990 
5  1607355 14573871 
6  1615336 14578178 
7  1603398 14574495 
8  1605153 14570727 
9  1606758 14573845 
10 1606655 14570953', header=TRUE, row.names=1) 

library(RANN) 
closest <- nn2(data=xy, k=2)[[1]] 

、我々はdata引数に、ポイント、xyのあなたの単一のセットを供給し、そして最も近い点が焦点であるので、我々はnn2は(各点に最寄りのポイントを見つけたいことを指定自体)。 nn2関数は、次の2つの要素を持つリストを返します。kの最も近い点(クエリされた点ごとに)のそれぞれのインデックスのベクトル(この場合は行列)。距離のベクトル(行列)である。私は距離には興味がないと仮定しているので、結果を最初の要素にサブセット化します。

私たちの問題では、結果は、2列目の行列で、最初の列のクエリされた点のインデックスと2番目の列の最も近い点のインデックスを与えます。

closest 

##  [,1] [,2] 
## [1,] 1 8 
## [2,] 2 6 
## [3,] 3 5 
## [4,] 4 7 
## [5,] 5 9 
## [6,] 6 2 
## [7,] 7 4 
## [8,] 8 10 
## [9,] 9 5 
## [10,] 10 8 

は、最寄りの点の座標の行列を取得するには、使用することができます:デフォルト nn2ことで

xy[closest[, 2], ] 

は、kd木を使用しています - あなたはtreetype='bd'を試してみることをお勧めします。

+0

これは素晴らしいですね。私が正しく理解していることを確認するために、座標1に最も近い点は座標8ですか?座標2、座標6など? – jhenson

+0

@jhenson - それは正しいです(よく、coord1に最も近い点はcoord1であり、2番目に近い点は8ですが、yes、あなたは画像を取得します) – jbaums

+0

Right!おかげさまで、これまでの私のデータではすごくうまくいっています。 – jhenson

関連する問題