将data.frame与SpatialPolygonsDataFrame合并以进行公寓分类

时间:2018-07-11 02:32:01

标签: r dataframe merge spatial

我想合并两个对象。第一个对象(base)是一个data.frame,其中包含波哥大公寓的信息,包括作为地理坐标的列。第二个对象(local)包含具有波哥大局部性的空间多边形。地方是城市的主要行政区划。

我想根据位置对每个公寓进行分类。

我的data.frame具有以下结构:

> str(base)
'data.frame':   37800 obs. of  10 variables:
 $ latitude      : num  4.69 4.64 4.81 4.71 4.6 ...
 $ longitude     : num  -74.2 -74.2 -74 -74.1 -74.1 ...
 $ price         : num  1.88e+09 7.80e+07 1.65e+09 9.50e+08 3.80e+08 ...
 $ area          : num  NA 45 280 193 148 195 NA 167 160 NA ...
 $ bedrooms      : int  NA 3 3 3 4 4 4 3 3 NA ...
 $ bathrooms     : int  NA 1 4 4 4 4 4 3 3 NA ...

另一方面,空间对象local如下:

> local
class       : SpatialPolygonsDataFrame 
features    : 20 
extent      : -74.44978, -73.98653, 3.73103, 4.836779  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +no_defs 
variables   : 6
names       :       LocNombre,          LocAAdmini,   LocArea, LocCodigo, SHAPE_Leng,   SHAPE_Area 
min values  : ANTONIO NARIÑO, Acuerdo 117 de 2003,   2060243,        01, 0.06715788, 0.0001677672 
max values  :            USME,   Acuerdo 9 de 1986, 780968758,        20, 1.91494942, 0.0635491267 

我的想法是获得这样的东西:

  longitude latitude   precio       area     bedrooms badrooms  locality
1 -74.16257 4.689394 1.88e+09         NA           NA    NA     Chapinero
2 -74.19299 4.637710 7.80e+07         45            3     1     Kennedy
3 -74.02988 4.807232 1.65e+09        280            3     4     Puente Aranda
4 -74.08040 4.713976 9.50e+08        193            3     4     Kennedy
5 -74.06911 4.602593 3.80e+08        148            4     4     Suba
6 -74.05801 4.725810 7.50e+08        195            4     4     Chapinero

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

1。将您的对象base转换为空间对象。

library(sp)    

xy <- base[, c(1,2)] # coordinates of your data.frame

base_sp <- SpatialPointsDataFrame(coords = xy, data = base,
                                  proj4string = CRS(proj4string(local)))

2。使用raster::extract()

library(raster)
raster::extract(local,     # raster or polygon to extract values from
                base_sp,   # points to extract values at
                sp = TRUE) # returns a spatial object