[R] Generating maps in R
Roger Bivand
Roger.Bivand at nhh.no
Sun Mar 30 20:11:35 CEST 2008
Aleksandr Andreev <aleksandr.andreev <at> duke.edu> writes:
>
> Greetings!
>
> I am trying plot some data on a map in R. Here's the scenario.
>
> I have a variable called probworkinghealthy which contains a predicted
> probability of employment for every individual in my sample (about
> 100,000 observations).
> I have another variable, called a001ter, which contains the subject of
> residency in the Russian Federation (akin to a US state) for every
> individual in the sample.
> I have a shape file with the boundaries of all the subjects, called russia.shp.
>
> I can plot boxplots of the probability by Federal Subject using
> plot(probworkinghealthy ~ a001ter). I can also plot the map using
> plot(russia.shp)
So what you need to do is to aggregate the input data frame for
individuals, and assign the summary value, here mean, to the correct
shapefile geometries. Probably most of what you need is in the maptools
package. There is a question about the IDs used to identify the Federal
Subject geometries in the shapefile. Assuming that they are named as in
the individual data frame, something like:
FS <- readShapePoly("russia.shp", IDvar="a001ter")
will associate the geometries in the SpatialPolygonsDataFrame with the
correct ID - change the IDvar argument value to suit the shapefile. If
you do not have IDs in the shapefile to match the unique values of
a001ter, you will need to create them.
>From there, create a new data frame with row names matching the unique IDs:
agg1 <- tapply(probworkinghealthy, a001ter, mean)
agg2 <- data.frame(mean_probworkinghealthy=agg1, row.names=names(agg1))
and check row.names(agg2) and
sapply(slot(FS, "polygons"), function(x) slot(x, "ID"))
for obvious blunders. Merge using:
FS1 <- spCbind(FS, agg2)
(usually takes a number of tries to get the matching correct). The
reason for the complications with IDs is that it is easy to merge data
with geometries in the wrong order, and having to provide positive
matching should help prevent this.
>
> Now, I would like to plot the mean probability of employment (i.e.
> mean(probworkinghealthy)) on a map of Russia using color coding all
> the Federal Subjects. Does anyone know how to do something like that?
Then
spplot(FS1, "mean_probworkinghealthy")
gives a map with default class intervals and colour palette.
I suggest that you also consider assigning a coordinate reference
system to the geometries as Russia has a large extent, and the
correct interpretation of the geometry coordinates may matter.
Roger
PS. You could consider following up on the R-sig-geo list, or exploring
information in the Spatial Task View, or in the list archives.
>
> Much appreciated,
>
> Aleks Andreev
> Duke University
>
More information about the R-help
mailing list