I recently ran my ‘Introduction to Spatial Data & Using R as a GIS’ course for the NCRM at the University of Southampton. This was the first time after I had updated the material from using the
SP library to using the new
SF library. The
SF (or Simple Features) library is a big change in how R handles spatial data.
Back in the ‘old days’, we used a package called
SP to manage spatial data in R. It was initially developed in 2005, and was a very well-developed package that supported practically all GIS analysis. If you have worked with spatial data in R and used the syntax
variable@data to refer to the attribute table of the spatial data, then you have used the
SP package. The
SP package worked well, but wasn’t 100% compatible with the R data frame, so when joining data (using
match()) you had to be quite careful, and we usually joined the table of data to the
variable@data element. For those in the know, it used
S4 data types (something I discovered when I generated lots of error messages whilst trying to do some analysis!)
SF library is relatively new (released Oct 2016) and uses the OGC (Open Geospatial Consortium) defined standard of Simple Features (which is also an ISO standard). This is a standardised way of recording and structuring spatial data, used by nearly every piece of software that handles spatial data. Using
SF also allows us to work with the
tidyverse series of packages which have become very popular, driven by growth in data science. Previously,
tidyverse expected spatial data to be a data frame, which the
SP data formats were not, and often created some interesting error messages!
The Geospatial Training Solutions ‘Introduction to R’ course is very well established, and I have delivered it 14 times to 219 students! However, it was due for a bit of a re-write, so I took the opportunity of moving from
SF to do restructure some of the material. I also changed from using the base R plot commands to using the
tmap library. As a result, it is now much easier to get a map from R. In fact, one of the participants from my recent NCRM course in Southampton said:
“It was so quick to create a map in R, I thought it would be harder.”Participant on Introduction to Spatial Data & Using R as a GIS, 27th March 2019, University of Southampton
They were blown away by how easy it was to create a map in R. With
tmap, you can get a map out in 2 lines (anything staring with
# is a comment):
LSOA <- st_read("england_lsoa_2011.shp") #read the shapefile
qtm(LSOA) #plot the map
You can also get a nice looking finished map with customised colours and classification very easily:
tm_polygons("Age00to04", title = "Aged 0 to 4", palette = "Greens", style = "jenks")
+ tm_layout(legend.title.size = 0.8)
However, unfortunately not all spatial analysis is yet supported in
SF. This will come with time, as the functions develop and more features are added. In the practical I get the participants to do some Point in Polygon analysis, where they overlay some crime points (from data.police.uk/data) with some LSOA boundaries. I couldn’t find out how to do a working point in polygon analysis* using this data and the
SF library, so I kept my existing
SP code to do this. This was also a useful pedagogical (teaching) opportunity to explain about
SP, as students are likely to come across both types of code!
*I know theoretically it should be possible to do a point-in-polygon with SF (there are many posts) but I failed to get my data to work with this. I need to have more of an experiment to see if I can get it working – if you would like to have a try with my data, please do!
The next course I am running is in Glasgow on 12th – 14th June where we will cover Introduction to Spatial Data & Using R as a GIS, alongside a range of other material over 3 days. Find out more info or sign up.