简单的方法来子集SpatialPolygonsDataFrame由R中的属性(即删除多边形)(Sim

2019-07-03 22:28发布

我想简单地从基于在@data数据帧对应的属性值,这样我可以绘制的简化/子集shape文件一个SpatialPolygonsDataFrame对象中删除一些多边形。 到目前为止,我还没有找到一种方法来做到这一点。

例如,假设我想删除这一切多边形世界shape文件是小于30000我将如何去这样做的领域?

或者,同样的,我怎么能删除南极?

require(maptools)

getinfo.shape("TM_WORLD_BORDERS_SIMPL-0.3.shp") 
# Shapefile type: Polygon, (5), # of Shapes: 246
world.map <- readShapeSpatial("TM_WORLD_BORDERS_SIMPL-0.3.shp")

class(world.map)
# [1] "SpatialPolygonsDataFrame"
# attr(,"package")
# [1] "sp"

head(world.map@data)
#   FIPS ISO2 ISO3 UN                NAME   AREA  POP2005 REGION SUBREGION     LON     LAT
# 0   AC   AG  ATG 28 Antigua and Barbuda     44    83039     19        29 -61.783  17.078
# 1   AG   DZ  DZA 12             Algeria 238174 32854159      2        15   2.632  28.163
# 2   AJ   AZ  AZE 31          Azerbaijan   8260  8352021    142       145  47.395  40.430
# 3   AL   AL  ALB  8             Albania   2740  3153731    150        39  20.068  41.143
# 4   AM   AM  ARM 51             Armenia   2820  3017661    142       145  44.563  40.534
# 5   AO   AO  AGO 24              Angola 124670 16095214      2        17  17.544 -12.296

如果我这样做,情节并不反映任何变化。

world.map@data = world.map@data[world.map@data$AREA > 30000,]
plot(world.map)

同样的结果,如果我这样做:

world.map@data = world.map@data[world.map@data$NAME != "Antarctica",]
plot(world.map)

任何帮助表示赞赏!

Answer 1:

看起来像你覆盖数据,但不删除多边形。 如果你想减少数据集包括数据和多边形,例如尝试

world.map <- world.map[world.map$AREA > 30000,]
plot(world.map)

[编辑2016年4月19日]使用该解决方案的工作,但@Bonnie否则有更新的版本[R报告(虽然也许数据也发生了变化?): world.map <- world.map[world.map@data$AREA > 30000, ]给予好评@邦妮的答案,如果这有助于。



Answer 2:

当我试图做到这一点R中3.2.1,添riffe的技术上面没有工作对我来说,虽然修改它稍微解决了这一问题。 我发现我不得不指定属性到子集上,如下面之前专门引用数据时隙,以及:

world.map <- world.map[world.map@data$AREA > 30000, ]
plot(world.map)

添加此作为备选答案的情况下,其他人遇到同样的问题。



Answer 3:

只要一提的是subset也使工作避免的条件写入数据的名称。

world.map <- subset(world.map, AREA > 30000)
plot(world.map)


Answer 4:

我使用上述技术,使地图只是澳大利亚:

australia.map < - world.map[world.map$NAME == "Australia",]
plot(australia.map)

之后,“澳大利亚”逗号是很重要的,因为它原来。

这种方法的一个缺点是,它似乎保留所有的属性列和行的所有其他国家,只是填充这些零。 我发现,如果我写了一个.shp文件,然后读回使用readOGR(rgdal包),它会自动删除空的地理数据。 然后,我可以写另一个形状文件,只有我想要的数据。

writeOGR(australia.map,".","australia",driver="ESRI Shapefile")
australia.map < - readOGR(".","australia")
writeOGR(australia.map,".","australia_small",driver="ESRI Shapefile")

在我的系统,至少,它是“读”功能,去除空数据,所以我必须回读一次之后,该文件写入(如果我尝试重新使用的文件名,我得到一个错误)。 我敢肯定有一个更简单的方法,但这似乎对我的工作的目的不够好反正。



Answer 5:

作为第二指针:这适合与形状“洞” shape文件的工作,因为它是由子集索引。



文章来源: Simple way to subset SpatialPolygonsDataFrame (i.e. delete polygons) by attribute in R