我正在使用空间多边形数据框。 数据可以在这里下载: 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, ]
答案 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, ]