6
votes

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 
1

1 Answers

6
votes

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.