从shapefile

时间:2017-07-01 22:18:19

标签: r distance spatial shapefile nearest-neighbor

我需要为每个市政府设置一个市政名单中最接近的值。该清单中的每个市政当局如果生产商品可能具有特定的价格价值,或者如果该商品在该年度不生产则具有NA。因此,我可以:a)有自己的价格; b)来自最近邻居的价格,这可能会在每年(2000年至2014年)发生变化。

此数据库位于通过SP <- readOGR("MT.shp")导入到R的shapefile中,其中N1是ID号,N2是市政府代码,N3是其名称,N4到N18是价格(如果可用):

$ N1 : Factor w/ 287 levels "1","10","100",..: 287 1 112 210 221 232 243 254 265 276 ...
$ N2 : Factor w/ 287 levels "1100015","1100023",..: 287 53 54 55 56 57 58 59 60 61 ...
$ N3 : Factor w/ 287 levels "AGUA AZUL DO NORTE",..: 148 2 3 4 5 1 6 7 10 16 ...
$ N4 : Factor w/ 39 levels "0.1999605989",..: 39 NA NA NA NA NA NA NA 32 NA ...
$ N5 : Factor w/ 49 levels "0.2099991931",..: 49 NA NA NA NA NA NA NA 42 NA ...
$ N17: Factor w/ 103 levels "0.5011494253",..: 103 NA NA NA NA NA NA NA 55 NA ...
$ N18: Factor w/ 100 levels "0.75","0.8092253594",..: 100 NA NA NA NA NA NA NA 93 NA ...

因此,我需要用最近的市政府的有效数字填写所有的NA(总计2965)。我从以下网址阅读了类似的指导:

R - Finding closest neighboring point and number of neighbors within a given radius, coordinates lat-long

但这并不适用于我的数据集。

有没有公式可以完成这项任务?

谢谢。

在@StatnMap帮助之后,我计算了所有最小距离:

> distmin <- spDists(SP, longlat = TRUE); class(distmin)

[1] "matrix"

我还有一个名为 psoy 的矩阵,其尺寸为(287 x 15)。一个例子:

         X2000     X2001     X2002
[1,]        NA        NA        NA
[2,] 0.2500000 0.2866667 0.3600000
[3,]        NA        NA        NA
[4,] 0.6500390 0.5598765 0.4000000
[5,] 0.7500390 0.5598765        NA
[6,] 0.6000000        NA 0.3500000
[7,] 0.4200150 0.4700000 0.3000000
[8,]        NA        NA 0.4000000

对于psoy的每一列,假设是X2000,我需要找到最近的有效(非NA)值的市政当局。我创建了一个新的数据框A试图按年管理这个问题:

> A <- data.frame(psoy$X2000, distmin)

例如,对于市政当局,A将是(第一列是价格,第二列是从X1到邻居的距离):

         X2000        X1
[1,]        NA   0.00000
[2,] 0.2500000 360.45196
[3,]        NA  62.37937
[4,] 0.6500390 261.60197
[5,] 0.7500390 583.45032
[6,] 0.6000000 696.34611
[7,] 0.4200150 600.53779
[8,]        NA 764.88325

因此,在这个例子中,X1没有值,应该从最近的市政当局返回值。我需要的答案是来自[4,]的0.6500390代替行[1,],X2000列中的NA。

我尝试了几个命令让它自动化,但没有一个工作。我做的最好的是:

A$psoy00r <- ifelse(!is.na(A$psoy.X2000), A$psoy.X2000,
    with(A, psoy.X2000[which.min(X1)], na.rm = TRUE))

但它仍然存在已存在的NAs。

感谢您的帮助,感谢您的关注。

0 个答案:

没有答案