Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I need to open a shape file from ArcMap in R to use it for further geostatical analysis. I've converted it into ASCII text file, but in R it is recognized as data.frame. Coordinates function doesn't work as soon as x and y are recognized as non-numeric. Could you help to deal with it?

share|improve this question
1  
What kind of shapefile? I'm assuming points since it has an X and Y column? –  Simbamangu Jan 20 '12 at 11:41
add comment

4 Answers 4

I agree with gissolved that you should use the shapefile directly ... the easiest way to do this is to ensure you have the maptools package installed, and read the shape as an object:

require(maptools)
shape <- readShapePoints("~/workspace/SHAPEFILE.shp")

This will give you an object which is a SpatialPointsDataFrame - the fields of the attribute table are then accessible to you in the same way as an ordinary dataframe, i.e. shape$ID for the ID column.

If you want to use the ASCII file you imported, then you should simply convert the text (character) x and y fields to numbers, e.g.:

shape$x <- as.numeric(shape$x)
shape$y <- as.numeric(shape$y)
coordinates(shape) <- ~x + y
share|improve this answer
add comment

I think you shouldn't convert the shapefile to an ASCII but instead use the shapefile directly with one of the spatial extensions. Here you can find a three ways to read (and write) a shapefile http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles. The R-spatial project will probably also interest you http://cran.r-project.org/web/packages/sp/index.html.

share|improve this answer
add comment

I agree with the Simbamangu and gissolved in terms of retaining the shapefile but want to direct your attention specifically to the rgdal library. Follow the link suggested by gissolved for the NCEAS and follow through with the directions for rgdal. It can be challenging to install on some machines but it can substantially improve results when it comes to projections.

The maptools library is excellent and allows you to define the projection for the shapefile you are reading in, but to do so you need to know how to specify that projection in the proj4 format. an example might look something like:

project2<-"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80    
   +datum=NAD83 +units=m +no_defs" #USA Contiguous Equidistant Conic Projection
data.shape<-readShapePoly("./MyMap.shp",IDvar="FIPS",proj4string=CRS(project2))
plot(data.shape)

If you want to go this route, then I recommend http://spatialreference.org as the place to go to figure out what your projection looks like in the proj4 format. If that looks like a hassle to you, rgdal will make it easy by reading the ESRI shapefile's .prj file (the file that contains ESRI's projection definition for the shapefile. To use rgdal on the same file you would simply write:

library(rgdal)
data.shape<-readOGR(dsn="C:/Directory_Containing_Shapefile",layer="MyMap")
plot(data.shape)

You can likely skate by without doing this if you are just working with a single shapefile, but as soon as you start looking at multiple data sources or overlaying with Google Maps, keeping your projections in good shape becomes essential.

For some helpful walkthroughs on spatial data in R, including a bunch of stuff on importing and working with point patterns, I have some old course materials online at http://csde.washington.edu/services/gis/workshops/SPATIALR.shtml that might help you see how these methods compare in practice.

share|improve this answer
    
+1 for spatial reference information ... especially for emphasizing keeping projections sorted out! –  Simbamangu Jan 23 '12 at 14:34
    
@csfowler, I tried to use the readOGR but it is not importing the .prj file. Any idea why? I am at UW as well, in the biology department. –  user4050 Oct 13 '13 at 6:49
    
@user4050, hard to know without seeing your code. I assume there is a .prj file in the same directory? and that you used the encoding = "ESRI Shapefile" value to make sure rgdal knows it is a shapefile? –  csfowler Oct 31 '13 at 15:48
add comment

One more alternative is to use fastshp library which offers::

Routines for handling of large ESRI shapefiles (.shp). This includes reading, thinning of points and matching of points to containing shapes. The main aim for this package is to provide the speed to support large shapefiles (millions of points). It is several orders of maginute faster than some other shapefile packages.

Here is my question on SE on how to use it with ggplot2:

How can I plot shapefile loaded through fastshp in ggplot2?

share|improve this answer
    
I find it a bit annoying that the read.shp function does not result in an sp object. Given that the spatial R community is converging on this as the de facto standard for handling spatial objects, I find this somewhat sloppy. Given sufficient RAM and a 64bit OS, reading large data is not much of an issue. With 8GB RAM I have read 30M points and 2.5M polygons using rgdal with no issues. Here is some direction on using sp objects with ggplot2: github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles –  Jeffrey Evans Nov 2 '12 at 19:47
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.