stackoverflow社区,

我有两个日本城市的shapefile。我正在使用R为每个城市创建单独的地块。我可以使用一个shapefile进行此操作,但使用另一个shapefile则无法使用相同的语法。以下是代码和数据的网址:

library(sp)
library(maptools)

# Map A - this one works
# Please download: http://www.filefactory.com/file/z26nirxoz53/n/JPN_adm_zip

# Enter your path for readShapePoly
japanMapA = readShapePoly("JPN_adm/JPN_adm2")
names(japanMapA)

plot(japanMapA[japanMapA$ID_2 == 1199,])

# Map B - this one doesn't work
# Please download: http://geocommons.com/overlays/173340.zip

# Again, enter your path for readShapePoly
japanMapB = readShapePoly("japan_ver71")
names(japanMapB)

plot(japanMapB[japanMapB$JCODE == 45382,])

它引发的错误是:
Error in plot(japanMapB[japanMapB$JCODE == 45382, ]) :
error in evaluating the argument 'x' in selecting a method for function 'plot': Error in japanMapB[japanMapB$JCODE == 45382, ] :
NAs not permitted in row index

在这种情况下,我不知道如何删除NA,因此无法绘制各个元素。

非常感谢您的帮助:在这上面,我的头一直撞墙了!

最佳答案

我认为这归结为具有适当子设置的问题。

您的japanMapB对象由一些元数据和一系列存储在japanMapB@polygons中的每种形状的多边形组成。所以你有了:

> length(japanMapB$JCODE)
#[1] 1902
> length(japanMapB@polygons)
#[1] 1902

正如@PaulHiemstra指出的那样,您的NA变量中有一些JCODE
> table(is.na(japanMapB$JCODE))

#FALSE  TRUE
# 1894     8

这意味着当您尝试索引要绘制的城市时,您会得到NA结果。
> table(japanMapB$JCODE==45382,useNA="always")

#FALSE  TRUE  <NA>
# 1893     1     8

包装which可解决此问题:
which(japanMapB$JCODE == 45382)
#[1] 1802
#You will now select to plot only the 1802th polygon stored in the data object
plot(japanMapB[which(japanMapB$JCODE == 45382),])

关于r - 从R中的shapefile绘制元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18306403/

10-12 22:31