我需要为每个市政府设置一个市政名单中最接近的值。该清单中的每个市政当局如果生产商品可能具有特定的价格价值,或者如果该商品在该年度不生产则具有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)。我从以下网址阅读了类似的指导:
但这并不适用于我的数据集。
有没有公式可以完成这项任务?
谢谢。
在@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。
感谢您的帮助,感谢您的关注。