knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "README-" )
This (very small) package provides a function to reapportionate data from one set of spatial polygons to another. This is useful, e.g., when one has some data which is distributed in some administrative units (e.g., the IRIS, the infra-urban unit at which the INSEE, the French national statistics institute, releases the census data) and needs to have it in some other units (e.g., "bureaux de vote", the French polling stations).
The function spReapportion
offers an option to reapportion data by hypothesising homogeneous repartition of the variable inside a unit, or by providing a matrix of weights. This matrix is a SpatialPointsDataFrame
, where each point has a weight (e.g.: a number of inhabitants). If you are aware of some alternative schemes, please submit an issue.
Also, for the time being, the agregation function being used is the sum, but I plan to allow for more agregation functions (possibly personalised). However, the package allows for dealing with proportions (only in the 0-1 range; if your proportions are expressed in the 0-100 range, please transform them) rather than counts: simply use the mode="proportion"
argument, and don't forget to include weights with the weights
argument (usually the total number of observations per unit).
This package is not on CRAN. For the time being, install it via the devtools
package:
devtools::install_github("joelgombin/spReapportion")
There is only one function for the time being in this package. The usage is as such:
library(spReapportion) data(ParisPollingStations2012) data(ParisIris) data(RP_2011_CS8_Paris) CS_ParisPollingStations <- spReapportion(ParisIris, ParisPollingStations2012, RP_2011_CS8_Paris, "DCOMIRIS", "ID", "IRIS")
You can then make sure that everything went fine, for example by comparing maps of the same data before and after reapportionment. Here, I'll use the great tmap
package.
library(tmap) library(tmaptools) library(dplyr) # first transform counts to percentages RP_2011_CS8_Paris <- RP_2011_CS8_Paris %>% mutate_at(vars(C11_POP15P_CS1:C11_POP15P_CS8), funs(. / C11_POP15P * 100)) # add data to the SPDF ParisIris <- append_data(ParisIris, RP_2011_CS8_Paris, key.shp = "DCOMIRIS", key.data = "IRIS") # plot original census units (IRIS) tm_shape(ParisIris) + tm_fill(col = "C11_POP15P_CS3", palette = "Blues", style = "quantile", n = 6, title = "Independent workers") + tm_borders()
# transform counts to percentages in the reapportionned data CS_ParisPollingStations <- CS_ParisPollingStations %>% mutate_at(vars(C11_POP15P_CS1:C11_POP15P_CS8), funs(. / C11_POP15P * 100)) ParisPollingStations2012 <- append_data(ParisPollingStations2012, CS_ParisPollingStations, key.shp = "ID", key.data = "ID") tm_shape(ParisPollingStations2012) + tm_fill(col = "C11_POP15P_CS3", palette = "Blues", style = "quantile", n = 6, title = "Independent workers") + tm_shape(ParisIris, is.master = TRUE) + tm_borders()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.