spa*_*sed 5 plot r shapefile na
stackoverflow社区,
我有两个日本自治市的形状文件.我正在使用R为每个城市创建单独的地块.我可以使用一个shapefile来完成这项工作,但是相同的语法会失败.以下是数据的代码和URL:
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,])
Run Code Online (Sandbox Code Playgroud)
它抛出的错误是:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我不知道如何去除NA,所以我无法绘制单个元素.
非常感谢你的帮助:我一直在墙上撞了一会儿!
我认为这归结为适当的子设置问题.
您的japanMapB对象由一些元数据和存储在其中的每个形状的一系列多边形组成japanMapB@polygons.所以你有了:
> length(japanMapB$JCODE)
#[1] 1902
> length(japanMapB@polygons)
#[1] 1902
Run Code Online (Sandbox Code Playgroud)
正如@PaulHiemstra指出的那样,你NA的JCODE变量中有一些值
> table(is.na(japanMapB$JCODE))
#FALSE TRUE
# 1894 8
Run Code Online (Sandbox Code Playgroud)
这意味着您在尝试索引要绘制的城市时获得NA结果.
> table(japanMapB$JCODE==45382,useNA="always")
#FALSE TRUE <NA>
# 1893 1 8
Run Code Online (Sandbox Code Playgroud)
包装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),])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3768 次 |
| 最近记录: |