`sp` provides a shorter form to select features based on spatial intersection, following the OP example: pts[ply,] as of: points(pts[ply,], col = 'red') Behind the scenes this is short for pts[!is.na(over(pts, geometry(ply))),] The thing to note is that there is a `geometry` method that drops attributes: `over` changes behaviour if its second argument has attributes or not (this was OP's confusion). This works accross all Spatial* classes in `sp`, although some `over` methods require `rgeos`, see [this][1] vignette for details, e.g. the case of multiple matches for overlapping polygons. [1]: http://cran.r-project.org/web/packages/sp/vignettes/over.pdf "this"