我正在尝试将一个' 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"
答案 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)
是否相同。