R - 完全删除裁剪的 shapefile 数据

R - Fully remove cropped shapefile data

有没有办法删除 R 中 SpatialPolygonsDataFrame 对象中未使用的级别?

我有一个很大的地质数据 shapefile Geology,我正在使用 raster::crop 工具进行裁剪。这似乎工作正常。

但是,当我尝试使用新的裁剪后的 shapefile Geo 工作时,Geology 中存在但 Geo 覆盖的区域中不存在的多边形类型仍然显示为 Geo。这会干扰我后面的分析。

我尝试使用 droplevels 删除这些 "ghost" levels/attributes,但此功能对 SpatialPolygonsSpatialPolygonsDataFrame 对象无效。

作为参考,我使用 wygeol_dd_polygon.shp 形状文件(可下载 here - 41.4 MB)作为起点。我的代码的重要部分如下:

library(maptools)
Geology <- readShapePoly("~/wygeol_dd_polygon.shp")

library(raster)
Geo <- crop(Geology, extent(-111.05, -110.25, 44.2667, 44.7667))

裁剪后,我有十种独特的岩石类型,但仍然有 46 个级别:

unique(Geo$ROCKTYPE1)
 [1] alluvium                   rhyolite                   mixed clastic/volcanic     intermediate volcanic rock
 [5] basalt                     water                      trachyandesite             sandstone                 
 [9] conglomerate               shale                     
46 Levels: alkalic intrusive rock alkalic volcanic rock alluvium andesite anorthosite basalt carbonate clastic ... water

如何摆脱这些?

您遇到问题的列作为因子变量。当您在 R 中裁剪因子时,它通常会保留裁剪后的因子,即使您的数据集中不再有任何剩余因子。很高兴这是一个简单的修复,如下所示:

Geo$ROCKTYPE1 <- factor(Geo$ROCKTYPE1)

这重新定义了系数,所以现在您应该只有 10 个级别,如您所愿。

试试这个:

Geo@data<-droplevels(Geo@data)

以上将在一次调用中处理所有因子列。