R - 完全删除裁剪的 shapefile 数据
R - Fully remove cropped shapefile data
有没有办法删除 R 中 SpatialPolygonsDataFrame
对象中未使用的级别?
我有一个很大的地质数据 shapefile Geology
,我正在使用 raster::crop
工具进行裁剪。这似乎工作正常。
但是,当我尝试使用新的裁剪后的 shapefile Geo
工作时,Geology
中存在但 Geo
覆盖的区域中不存在的多边形类型仍然显示为 Geo
。这会干扰我后面的分析。
我尝试使用 droplevels
删除这些 "ghost" levels/attributes,但此功能对 SpatialPolygons
或 SpatialPolygonsDataFrame
对象无效。
作为参考,我使用 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)
以上将在一次调用中处理所有因子列。
有没有办法删除 R 中 SpatialPolygonsDataFrame
对象中未使用的级别?
我有一个很大的地质数据 shapefile Geology
,我正在使用 raster::crop
工具进行裁剪。这似乎工作正常。
但是,当我尝试使用新的裁剪后的 shapefile Geo
工作时,Geology
中存在但 Geo
覆盖的区域中不存在的多边形类型仍然显示为 Geo
。这会干扰我后面的分析。
我尝试使用 droplevels
删除这些 "ghost" levels/attributes,但此功能对 SpatialPolygons
或 SpatialPolygonsDataFrame
对象无效。
作为参考,我使用 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)
以上将在一次调用中处理所有因子列。