# 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.
sp provide powerful functions. Spatial data in R can be stored as
* can be
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
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 = ".")
# Importing a shape file (.shp)
ESRI shape files can easily be imported into R by using the function
readOGR() from the
library(rgdal) 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.
Another possible way of importing shapefiles is via the
raster library and the
library(raster) shp <- shapefile("path/to/your/file.shp")
Note how the path definition is different from the rgdal import statement.
tmap package provides a nice wrapper for the
library(tmap) sph <- read_shape("path/to/your/file.shp")