空间多边形数据集+子集

时间:2017-11-29 17:43:22

标签: r

我正在使用空间多边形数据框。 数据可以在这里下载: http://geoportal.statistics.gov.uk/datasets/lower-layer-super-output-areas-december-2011-super-generalised-clipped-boundaries-in-england-and-wales

这包含英格兰和威尔士的下层输出区域(lsoa)。

我需要对数据帧进行子集化,以便仅保留london lsoa11cd的多边形。

我有伦敦的lsoa11cd列表。 它们介于E01000001和E01004765之间。我不确定如何继续对空间多边形进行子集化(参见附图)。在下面找到一个不起作用的尝试。

london <- shapefile[substr(shapefile@data$lsoa11cd, -7 , -1) <= 1004765, ]
london <- london[substr(london@data$lsoa11cd, -7 , -1) >= 1000001, ]

Dataframe screenshot

1 个答案:

答案 0 :(得分:1)

如果我正确地解释了你的问题,这应该很好用:

使用shapefile包中的raster函数读入shapefile:

library(raster)

# Read-in the data. This will create a SpatialPolygonsDataFrame with 34,753 features
s <- shapefile('Lower_Layer_Super_Output_Areas_December_2011_Super_Generalised_Clipped__Boundaries_in_England_and_Wales.shp')

看起来所有lsoa11cd值都有一个字母和一个数字作为字符串中的前两个字符。让我们首先对数据进行子集化,以便只保留那些将'E'作为lsoa11cd值的第一个聊天对象。

s <- s[grep("^[aE].*", s$lsoa11cd), ]

现在我们可以从每个lsoa11cd字符串中删除前两个字符并转换为数字变量,以便更轻松地进行子集化,如下所示:

s$lsoa11cd <- as.numeric(substring(s$lsoa11cd, 3)) 

然后您可以在您指定的范围内简单地进行子集化:

s <- s[s$lsoa11cd %in% 1000001:1004765, ]