【问题标题】:Spatial polygon dataset + subset空间多边形数据集 + 子集
【发布时间】:2017-11-29 17:43:22
【问题描述】:

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

【问题讨论】:

  • substr 不适用于负开始和停止(至少不是base::substr)。请改用substr(..., 2, 8)。结果将是一个字符串,在与数字比较之前转换为数字。
  • 一般来说,我会推荐在发布之前尝试小测试用例的调试策略。我刚刚做了x = "E01000001" 然后substr(x, -7, -1)。它没有用。然后当我得到substr(x, 2, 8)时,我尝试了substr(x, 2, 8) &gt; 1,它也没有工作,所以我得到了as.integer(substr(x, 2, 8)) &gt; 1,它按预期工作。
  • 我试过了。我使用 as.numeric(substr(shapefile, 2,8))
  • 你仍然需要shapefile@data$lsoa11cd,而不仅仅是shapefile。并尝试仅对@data 进行子集化,而不是其他内容。如果您发布最少位数据,我们可以共享代码。
  • 谢谢格雷戈尔。你很善良。数据可以在这里下载:geoportal.statistics.gov.uk/datasets/…你需要下载文件并使用readOGR将shapefile导入R

标签: r


【解决方案1】:

如果我正确解释了您的问题,这应该可以很好地工作:

使用raster 包中的shapefile 函数来读入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, ]

【讨论】:

  • 或许更直接:s &lt;- s[s$lsoa11cd %in% paste0("E0", 1000001:1004765), ]
猜你喜欢
  • 2019-02-22
  • 2018-09-30
  • 1970-01-01
  • 2019-05-15
  • 2019-05-15
  • 2015-02-25
  • 2018-12-13
  • 2018-08-01
  • 2020-01-31
相关资源
最近更新 更多