2017-12-05 22 views
0

私は家庭の範囲に基づいて多数の重心(84)を作成しました。これらのセントロイドはすべて、値として保存された個別の正式クラスSpatialPointです。ここで4つの例は、次のとおり空間データから行列を作成する

> C004cen 
SpatialPoints: 
       x  y 
homerange -122.7916 42.87038 
Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84 
+ellps=WGS84 +towgs84=0,0,0 

> C006cen 
SpatialPoints: 
       x  y 
homerange -122.5906 42.96253 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

> C008cen 
SpatialPoints: 
       x  y 
homerange -122.5926 42.95456 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

> C012cen 
SpatialPoints: 
      x  y 
homerange -122.567 42.68344 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

私は基本的に各細胞を移入の間の距離と84x84であるこれらの84体の重心のマトリックスを作成したいです。しかし私は、84個の個々のFormal Class SpatialPointsからマトリックスに行く方法はあまりよく分かりません。これらの重心のすべてを単一のFormal Class SpatialPointsに結合するのが最初のやり方だと思いますが、SpatialPointsDataFramesを扱っていることは今までのところすべてでした。 84の別々のSpatialPointを1つのSpatialPointに統合することは可能ですか?

距離を生成するコマンドはRobertHありがとうございます。あなたは距離行列をしたい場合は

+1

あなたがあなたの質問を再現することができれば、応答を得る可能性が高くなります。たとえば、他のユーザーが作業するためのデータを提供します。これはおそらく、問題を示す小さなデータセットを作成することを意味します。また、実際に仕事をしなくても「これをやりたい」と頼むだけで、貧弱なフォームとStackOverflowの「オフトピック」です。 – SymbolixAU

+0

私が実際に見逃していた部分は、とてもシンプルになっていました。すべてのFormal Class SpatialPointをまとめて、RobertHが提案した方法で処理することができます。 –

答えて

1
# Please provide example data! 
library(raster) 
n <- 10 
set.seed(123) 
x <- runif(n) * 360 - 180 
y <- runif(n) * 180 - 90 
xy <- SpatialPoints(cbind(x, y), proj4string=CRS('+proj=longlat +datum=WGS84')) 
xy 
#class  : SpatialPoints 
#features : 10 
#extent  : -163.5997, 158.5682, -82.42928, 82.23 (xmin, xmax, ymin, ymax) 
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

考えるSpatialPoints *オブジェクトxyは、我々は

d <- pointDistance(xy) 
round(d/1000) 

#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
# [1,]  0 NA NA NA NA NA NA NA NA NA 
# [2,] 11799  0 NA NA NA NA NA NA NA NA 
# [3,] 5857 14840  0 NA NA NA NA NA NA NA 
# [4,] 9276 4456 14923  0 NA NA NA NA NA NA 
# [5,] 18285 7930 15556 9508  0 NA NA NA NA NA 
# [6,] 2146 10976 7871 7574 16150  0 NA NA NA NA 
# [7,] 14955 9631 9627 13941 6769 17060  0 NA NA NA 
# [8,] 19451 8406 14380 10604 1285 17416 5524  0 NA NA 
# [9,] 13471 9090 8817 13543 8223 15442 1790 7053  0 NA 
#[10,] 901 11372 5594 9377 18842 2829 14231 19647 12662  0 

を行うことができ、あなたが行うことができます:

dd <- as.dist(d) 

あなたは、NASをしたくない場合は、することができます:

d <- as.matrix(as.dist(d)) 
round(d/1000) 

#  1  2  3  4  5  6  7  8  9 10 
#1  0 11799 5857 9276 18285 2146 14955 19451 13471 901 
#2 11799  0 14840 4456 7930 10976 9631 8406 9090 11372 
#3 5857 14840  0 14923 15556 7871 9627 14380 8817 5594 
#4 9276 4456 14923  0 9508 7574 13941 10604 13543 9377 
#5 18285 7930 15556 9508  0 16150 6769 1285 8223 18842 
#6 2146 10976 7871 7574 16150  0 17060 17416 15442 2829 
#7 14955 9631 9627 13941 6769 17060  0 5524 1790 14231 
#8 19451 8406 14380 10604 1285 17416 5524  0 7053 19647 
#9 13471 9090 8817 13543 8223 15442 1790 7053  0 12662 
#10 901 11372 5594 9377 18842 2829 14231 19647 12662  0 
関連する問題