0
votes

I want to do some spatial statistic analysis with the county-level crop yield data in Nebraska for the STAT class. For that I need the longitude and latitude of the geographic centroids of each county. Anybody know how to do it in R? I know it can be done in ArcGIS but I have no access to it now.

3
This question should be moved to gis.stackexchange.com.user3710546

3 Answers

3
votes

You didn't give any details where you got your shapefile from, but I got one from here and you can use gCentroid from rgeos thusly:

library(rgdal)
library(sp)
library(rgeos)

nebraska <- readOGR("CountyBoundsUTM/", "CountyUTM")

gCentroid(nebraska, byid=TRUE)

## SpatialPoints:
##           x       y
## 0  721768.5 4636738
## 1  430938.8 4524651
## 2  698036.4 4566570
## 3  370970.6 4641340
## ...
## 89 623301.6 4603228
## 90 618883.0 4486931
## 91 439295.3 4582756
## 92 493680.8 4522680
## Coordinate Reference System (CRS) arguments: +proj=utm +zone=14 +datum=NAD83
## +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0 
0
votes

You can also extract centroids of SpatialPolygons* objects with coordinates, though the centroids won't be returned as SpatialPoints as with rgeos::gCentroid.

For example:

library(rgdal)
download.file('http://dds.cr.usgs.gov/pub/data/nationalatlas/countyp020_nt00009.tar.gz', 
              f <- tempfile()) # ~ 4.5 Mb
untar(f, exdir=tempdir())
counties <- readOGR(tempdir(), 'countyp020')
xy <- coordinates(counties)
head(xy)

#        [,1]     [,2]
# 0 -153.3905 69.30193
# 1 -156.0582 71.33094
# 2 -155.6695 71.24763
# 3 -155.5164 71.23148
# 4 -155.1846 71.18189
# 5 -155.6126 71.00725

Note that, as pointed out by @Spacedman in the comments, the polygons should be projected to a planar coordinate system first.

-2
votes

You can use the get_map() function from the ggplot2 package to extract the US county map data from the maps package to a dataframe. Then you can calculate the mid points of the ranges of the lat/lon columns by county (or whatever method you want to use to define geographic center).