I have a set of coordinates as a SpatialPointsDataFrame object in R and I am clipping these points using a polygon to get only those points that are found within this polygon. I am doing this with the gIntersection function from the rgeos package. My problem is that the function only returns the coordinates of those points, and not the metadata associated with them. Is there some way to have gIntersection pass all data to the result, rather than only the coordinates?
Here is an example:
The SpatialPointsDataFrame representing species occurrence points:
> spexample
coordinates SpAbbr InstitutionCode CatalogNumberText
1 (-76.8727, 3.66282) BanRot EBIRD_COL OBS81997559
2 (-76.9749, 3.71683) BanRot AUDCLO OBS89767945
3 (-76.884, 3.61609) BanRot AUDCLO OBS89769896
4 (-77.5167, 5.51667) BanRot AMNH Skin-123476
5 (-76.0334, 4.86669) BanRot LACM 34848
6 (-78.4333, 1.43333) BanRot LSUMZ 38939
7 (-78.55, 0.95) BanRot ANSP 开发者_运维问答182799
8 (-79.2139, 0.471944) BanRot AUDCLO OBS58485973
9 (-78.5104, 0.895349) BanRot AUDCLO OBS84822747
10 (-78.3781, 1.51028) BanRot AUDCLO OBS67916517
11 (-75.15, 7.07) BanRot 8110002317-09 4743-5160
Clipping those points to a polygon:
> gIntersection(spexample,bufferclip)
SpatialPoints:
x y
1 -78.55000 0.9500000
1 -78.51036 0.8953493
1 -78.43333 1.4333333
1 -78.37810 1.5102800
1 -76.97495 3.7168289
1 -76.88397 3.6160872
1 -76.87271 3.6628163
1 -76.03337 4.8666900
Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84
+ellps=WGS84 +towgs84=0,0,0
Use gIntersects (not gIntersection) with byid = TRUE to get a TRUE/FALSE vector of which points are in your buffer. Then subset your points data frame. Job done.
精彩评论