# spatial analysis

# Create spatial points from XY data set

When it comes to geographic data, R shows to be a powerful tool for data handling, analysis and visualisation.

Often, spatial data is avaliable as an XY coordinate data set in tabular form. This example will show how to create a spatial data set from an XY data set.

The packages rgdal and sp provide powerful functions. Spatial data in R can be stored as Spatial*DataFrame (where * can be Points, Lines or Polygons).

This example uses data which can be downloaded at OpenGeocode (opens new window).

At first, the working directory has to be set to the folder of the downloaded CSV data set. Furthermore, the package rgdal has to be loaded.


Afterwards, the CSV file storing cities and their geographical coordinates is loaded into R as a data.frame

xy <- read.csv("worldcities.csv", stringsAsFactors = FALSE)

Often, it is useful to get a glimpse of the data and its structure (e.g. column names, data types etc.).


This shows that the latitude and longitude columns are interpreted as character values, since they hold entries like "-33.532". Yet, the later used function SpatialPointsDataFrame() which creates the spatial data set requires the coordinate values to be of the data type numeric. Thus the two columns have to be converted.

xy$latitude <- as.numeric(xy$latitude)
xy$longitude <- as.numeric(xy$longitude)

Few of the values cannot be converted into numeric data and thus, NA values are created. They have to be removed.

xy <- xy[!is.na(xy$longitude),]

Finally, the XY data set can be converted into a spatial data set. This requires the coordinates and the specification of the Coordinate Refrence System (CRS) in which the coordinates are stored.

xySPoints <- SpatialPointsDataFrame(coords = c(xy[,c("longitude", "latitude")]),
proj4string = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"),
data = xy

The basic plot function can easily be used to sneak peak the produced spatial points.

plot(xySPoints, pch = ".")

enter image description here (opens new window)

# Importing a shape file (.shp)

# rgdal

ESRI shape files can easily be imported into R by using the function readOGR() from the rgdal package.

shp <- readORG(dsn = "/path/to/your/file", layer = "filename")

It is important to know, that the dsn must not end with / and the layer does not allow the file ending (e.g. .shp)

# raster

Another possible way of importing shapefiles is via the raster library and the shapefile function:

shp <- shapefile("path/to/your/file.shp")

Note how the path definition is different from the rgdal import statement.

# tmap

tmap package provides a nice wrapper for the rgdal::readORG function.

sph <- read_shape("path/to/your/file.shp")