Extract time series of a point ( lon, lat) from netCDF in R

Cirrus picture Cirrus · Dec 16, 2013 · Viewed 8.1k times · Source

I am relatively new on R. I am trying to get time series of different points ( lat, lon) of temperature data from a netCDF file. My sample data file is here and here is the small file . I have tried netCDF package and the code i have used so far

library(ncdf)
obsdata = open.ncdf("obs.nc")

print.ncdf(obsdata) 

obsdatadates = obsdata$dim$time$vals
obsdatadates = as.Date(obsdatadates,origin = '1950-01-01') 
obsdatadates
obsoutput = get.var.ncdf(obsdata, varid = 'tasmin', start = c(1,1,1),
                         count = c(1,1,22280))
dim(obsoutput)
datafinal=merge(obsdatadates,obsoutput)

Can anyone help me to get a dataframe of timeseries ( first column) and value of data in another for a particular points( lat, lon) of that data. In this case I am looking for time series ( 1950-01-01 to 2010-12-31 for which the data is ) for a particular lat lon point ( and repeat for many points of interests) and for given variable(in this case tasmin). Your help would be appreciated. Thank you, aseem

Answer

mdsumner picture mdsumner · Dec 17, 2013

Perhaps use the raster package, this won't work for all NetCDF files but it does for yours:

library(raster)
## brick reads all 22280 layers
r <- brick("obs.nc", varname = "tasmin")
## extract works for all time steps
vals <- extract(r, matrix(c(-120, 52.5), ncol = 2))

dim(vals)
## [1]     1 22280

Note that gives a 1-row, many column matrix because I only gave a single point to extract().

(The extraction is simple with direct copy from the nearest cell, use method = "bilinear" to do interpolation). See ?extract for other options.