解决为什么空间对象的子集不起作用的问题

时间:2017-10-27 09:07:59

标签: r subset spatial

我正在尝试将一个' SpatialPolygonsDataFrame'在R中,但其他线程中提出的方法似乎不起作用。我正在使用R版本3.3.2,我通过Mac上的R studio访问它。

不幸的是,我无法提供我的数据集,(因为我无法对我的数据进行子集化)。

此,

sp2 <- sp1[sp1@data$compound_found == 1, ]

产生了以下错误:

Error in sp1[sp1@data$compound_found == 1, ] :    cannot get a slot ("Polygons") from an object of type "NULL"

尽管

sp1@data$compound_found == 1

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE 
[14] FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
FALSE FALSE  TRUE  TRUE 
[27]  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
TRUE FALSE FALSE FALSE  TRUE

sp2 <- sp1["compound_found" == 1, ]

不会创建错误,但会创建一个空对象

nrow(sp2@data) # returns 0

任何解释为什么我无法按照我的方式进行分组?我怎么能这样做呢?

编辑:

class(sp1)

返回

[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"

1 个答案:

答案 0 :(得分:1)

编辑以描述在OP的帮助下到达解决方案的故障排除。

SpatialPolygonsDataFrame通常可以按照OP在原始问题中所做的那样进行子集化:

sp1[sp1@data$compound_found == 1, ]

在不看数据的情况下,不确定错误的来源。要进行故障排除,您可以检查SpatialPolygonsDataFrame的结构,以查看错误的来源。

str(sp1) 

您还可以单独对@data@polygons进行分组,以检查它是否正在拉动正确的元素。

如果您想要分组sp1@data,可以使用:

sp1@data[1:ncol(sp1@data)][sp1@data$compound_found == 1,]

获取sp1@polygons

sp1@polygons[sp1@data$compound_found == 1]

请注意,@data@polygons的长度应相同。见http://www.dpi.inpe.br/gilberto/tutorials/software/R-contrib/sp/html/SpatialPolygons.html

&#34;数据:数据中的行数应该等于Sr&#34中的多边形类对象的数量;

检查nrow(sp1@data)length(sp1@polygons)是否相同。