Reading an ASC file into R

arifyali picture arifyali · Nov 24, 2013 · Viewed 31.6k times · Source

I'm currently trying to extract information from various "ASC" files into R in order to perform analysis on the data.

The issue is that I am unsure of how exactly to read in the files. I attempted a standard read.table functions, but all the numbers were exactly the same (-9999.00). In order to rule out the possibility of data corruption, I read in another ASC file and got the same results. The only thing I know for certain, is that the file size between them is exactly the same.

Is there anyway that I can read these files in? Any R package I can look at?

I tied this:

    x = read.table("Dropbox/MVZ/aet2009sep.asc")
    y = read.table("Dropbox/MVZ/aet2009oct.asc")

and my outputs were

    > head(x, n =20)
         V1        V2
    1         ncols    3486.0
    2         nrows    4477.0
    3     xllcorner -374495.8
    4     yllcorner -616153.3
    5      cellsize     270.0
    6  NODATA_value   -9999.0
    7      -9999.00   -9999.0
    8      -9999.00   -9999.0
    9      -9999.00   -9999.0
    10     -9999.00   -9999.0
    11     -9999.00   -9999.0
    12     -9999.00   -9999.0
    13     -9999.00   -9999.0
    14     -9999.00   -9999.0
    15     -9999.00   -9999.0
    16     -9999.00   -9999.0
    17     -9999.00   -9999.0
    18     -9999.00   -9999.0
    19     -9999.00   -9999.0
    20     -9999.00   -9999.0

    head(y, n =20)
         V1        V2
    1         ncols    3486.0
    2         nrows    4477.0
    3     xllcorner -374495.8
    4     yllcorner -616153.3
    5      cellsize     270.0
    6  NODATA_value   -9999.0
    7      -9999.00   -9999.0
    8      -9999.00   -9999.0
    9      -9999.00   -9999.0
    10     -9999.00   -9999.0
    11     -9999.00   -9999.0
    12     -9999.00   -9999.0
    13     -9999.00   -9999.0
    14     -9999.00   -9999.0
    15     -9999.00   -9999.0
    16     -9999.00   -9999.0
    17     -9999.00   -9999.0
    18     -9999.00   -9999.0
    19     -9999.00   -9999.0
    20     -9999.00   -9999.0

Answer

Andre Silva picture Andre Silva · Nov 24, 2013

Update: It is possible to read .asc files (aka ESRI ASCII Raster files) with the raster function directly from the 'raster' package. The help says:

If x is a filename, the following additional variables are recognized:

native: logical. Default is FALSE except when package rgdal is missing. If TRUE, reading and writing of ..., and Arc ASCII files is done with native (raster package) drivers, rather than via rgdal....

library(raster)
r = raster("C:\\...\\Dropbox/MVZ/aet2009sep.asc")
plot(r)

Edit 2 [obsolete]:

An alternative is the raster() function, having the package rgdal properly installed.

library(rgdal)
r = raster("C:\\...\\Dropbox/MVZ/aet2009sep.asc")
plot(r)

Edit 1 [obsolete]:

The package adehabitat is now deprecated. Currently, it provides a warning when loading it:

It is dangerous to use it, as bugs will no longer be corrected. It is now recommended to use the packages adehabitatMA, adehabitatLT, adehabitatHR, and adehabitatHS.
...

Original answer [obsolete]:

Use the import.asc function from R package adehabitat (see page 92):

library(adehabitat)
asc = import.asc("C:\\...\\Dropbox/MVZ/aet2009sep.asc")

#plot asc object.
library(raster)
r = raster(asc)
plot(r)