When joining attributes by location with the over
function in R
from the sp
package, only the values for one of the polygons that intersects is retained. Is there a way in R that allows to take attributes of more than located feature? That is, to get ALL qualitative values the polygons that intersect/overlap. With an attribute column for the value of the first located feature, another for the second located feature, etc.
I have also asked in a separate question about Joining attributes by location for more than one located feature using QGIS
Sample code to perform simple spatial joins
#set up sample data
install.packages('tmap')#use this library to upload sample spatial polygons
library(tmap)
data(Europe) # countries
data(metro) # cities
#transform sample data of points into polygons with same crs/projection for this example (trivial example because point.in.poly suited to this problem but just for the sake of an example
metro.pts=spTransform(metro, crs(Europe))
metro.poly=gBuffer(metro.pts, width=50000, byid=TRUE)
#load libraries for spatial join
library(rgdal)
library(sp)
#spatial join of the two polygon shapefiles
#"find the cities in each country"
joined_one=cbind(over(Europe, metro.poly), as.data.frame(Europe))
#but this only joins one of the cities in each country even when more than one city is present
#if we check for spain, we only have Barcelona and not Madrid even though it is part of the city file
na.omit(joined_first[joined_first$iso_a3=="ESP",])
metro.poly[metro.poly$name=="Madrid"|metro.poly$name=="Barcelona",]
#using the `fn` option (function) we can calculate arithmetic for quantitative variables as to get values for more than one polygon that intersects
joined_qn=cbind(over(Europe, metro.poly[,5:8], fn=mean), as.data.frame(Europe))