Skip to content
Prev 24074 / 29559 Next

Population-weighted Centroids of Polygons in R

Hi?Lo?c,

Thank you so much for your reply. I went through the approach that you have already proposed. I believe it's a great idea.?
I'd like to emphasize that the coordinates of the centroid of each block is available. The idea is how to relate these centroids to the corresponding population of the blocks (which are all inside a larger polygon, of course) and to find a global centroid for the large polygon which could reflect the effect of the population density in the blocks.
I also wonder if I can find way to compute the "weighted average" using a kind of distance function.

In this regard, any suggestions would be welcome.
Thanks for your time.

Sincerely,Sohrab
On Sunday, February 21, 2016 11:45 PM, Lo?c Dutrieux <loic.dutrieux at wur.nl> wrote:
Hi Sohrab,

I don't think there is a method for weighted centroids specifically.
What if you get the centroid coordinates of each "block" using 
gCentroid() and calculate a weighted average of the coordinates of every 
centroid?
See an example below assuming your blocks are a 
SpatialPolygonsDataFrame. It's quite a simple approach; not sure how 
valid it would be with more complex features though (eg: with holes, etc)...

Cheers,
Lo?c

library(rgeos)
library(sp)

# Generate SpatialPolygonsDataFrame object (blocks with population data)
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
sp <- spPolygons(cds1, cds2)
spdf <- SpatialPolygonsDataFrame(sp, data.frame(pop = c(25,32)))

# Get centroid of every polygon
centroids <- gCentroid(spdf, byid = TRUE)

# Get a dataframe with coordinates of centroids and weights
df <- cbind(data.frame(centroids), spdf at data)

# SpatialPoints corresponding to Weighted centroid
SpatialPoints(data.frame(x = weighted.mean(df$x, df$pop), y = 
weighted.mean(df$y, df$pop)))
On 02/21/2016 09:10 PM, Sohrab Abbasnejad via R-sig-Geo wrote:
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo at r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo