2016-05-12 10 views
0

Ich habe die folgende .NC4-Datei und für jeden Lat und lange möchte ich das Datum/Uhrzeit und den Wert extrahieren. Ich werde jede als CSV-Datei speichern.konvertieren NC-Daten in Zeitreihe CSV-Datei an jeder Koordinate/Rasterzelle

https://www.dropbox.com/s/p3j84rhbq7oo0o6/svc_MERRA2_100.tavg1_2d_lnd_Nx.19800101.nc4?dl=0

Meine Codes sind als

library(ncdf4) 
library(RNetCDF) 
#open nc file 
dat.ncdf4 <- nc_open("svc_MERRA2_100.tavg1_2d_lnd_Nx.19800101.nc4") 
#extracting variable of interest 
prectot <- ncvar_get(dat.ncdf4, varid="PRECSNOLAND") 
# get time dimension 
timeDim  <- ncvar_get(nc, "time") 
# Put the time in a reader friendly format 
label.time <- names(dat.ncdf4$dim)[1] 
date.char <- date.char <- utcal.nc(dat.ncdf4$dim[[label.time]]$units, dat.ncdf4$dim[[label.time]]$vals, type="s") 
date.POSIXlt <- strptime(date.char, format="%Y-%m-%d %H:%M:%S", tz="UTC") 
timeDim  <- as.POSIXct(date.POSIXlt) 

# get lon/lat : 
lonDim   <- ncvar_get(dat.ncdf4, "lon") 
latDim   <- ncvar_get(dat.ncdf4, "lat") 

# close netcdf file 
nc_close(dat.ncdf4) 

# The loop is to extract data for each lat and long 
for(i in seq_along(latDim)) 
{ 
for(j in seq_along(lonDim)) 
    { 

    # making the time series of date, precip, lat and long 
    d1 <- data.frame(time = timeDim, prectot = prectot, latitude = latDim[i], longitude = lonDim[j]) 
    write.table(d1, paste("Prp ",latDim[i],lonDim[j],".csv"), append = F, row.names= FALSE,col.names=FALSE, sep=",") 
    d1 = NULL 
} 


    } 

Für jede Gitterzelle (Breitengrad und Längengrad) folgt erwarte ich, dass vier Spalten (Datum, den Wert, Breite und Länge) jedoch, wenn ich diesen Code lief Ich bekomme über 60 Spalten mit Daten für jede generierte CSV-Datei. Ihre Führung würde geschätzt, wie ich kann nicht herausfinden, was ich tue, falsch

+0

prectot ist die Anordnung von Zahlen, lat x long x Datum, und Sie schreiben es jedes Mal. Wollen Sie einen Teil davon für jede Ihrer 48 CSV-Dateien auswählen? Sie wollten 48 CSV-Dateien, ja? – Spacedman

+0

Ich möchte 48 CSV-Dateien, die Datum, Prectot und Lat enthalten und lange Prectot stammt aus. – nee

+0

Und jede Datei wird 24 Zeilen haben? Eins für jedes Mal? In diesem Fall müssen Sie eine * Scheibe * von 'Prectot' nehmen, und schreiben Sie das, wahrscheinlich 'prectot [i, j,] 'ja? Testen Sie Ihren Code, indem Sie überprüfen, was 'd1' in Ihrer Schleife ist. – Spacedman

Antwort

0

Mit ncks von NCO

[email protected]:~$ ncks -H -C -v three_dmn_rec_var ~/nco/data/in.nc 
time[0]=1 lat[0]=-90 lon[0]=0 three_dmn_rec_var[0]=1 
time[0]=1 lat[0]=-90 lon[1]=90 three_dmn_rec_var[1]=2 
time[0]=1 lat[0]=-90 lon[2]=180 three_dmn_rec_var[2]=3 
time[0]=1 lat[0]=-90 lon[3]=270 three_dmn_rec_var[3]=4 

und mit --no_dmn_var_nm

[email protected]:~$ ncks --no_dmn_var_nm -H -C -v three_dmn_rec_var ~/nco/data/in.nc 
1 -90 0 1 
1 -90 90 2 
1 -90 180 3 
1 -90 270 4