Я новичок в R и хочу записать файл NetCDF в CSV, включая все месяцы (независимо от года).
Я пытался написать таблицу CSV, создав слой с использованиемфункция кирпича, но не получила желаемого результата.Я также попробовал другой подход, преобразовав его в массив, затем конец вектора, затем в матрицу, но, к сожалению, и здесь не удалось.
#1st approach
library(raster)
n=brick(file.choose()) #directly using brick function in .nc file
n
[1] class : RasterBrick
dimensions : 135, 129, 17415, 421 (nrow, ncol, ncell, nlayers)
resolution : 0.25, 0.25 (x, y)
extent : 6.5, 38.75, 66.25, 100 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source :.....\india_ESAcombined_1979_2013_0.25deg_resMONTHLY.nc
names : X1979.01.16, X1979.02.14, X1979.03.16, X1979.04.15, X1979.05.16, X1979.06.15, X1979.07.16, X1979.08.16, X1979.09.15, X1979.10.16, X1979.11.15, X1979.12.16, X1980.01.16, X1980.02.15, X1980.03.16, ...
Date : 1979-01-16, 2014-01-01 (min, max)
varname : soilM
.............................................
.............................................
dim(n)
[1] 135 129 421
nc.df <- as.data.frame(nc[[1:421]], xy=T) #creating a dataframe
head(nc.df)
x y X1979.01.16 X1979.02.14 X1979.03.16 X1979.04.15 X1979.05.16
1 6.625 99.875 NA NA NA 0.16565 0.1231500
2 6.875 99.875 NA NA NA 0.12690 0.1563500
3 7.125 99.875 NA NA NA NA 0.1845333
4 7.375 99.875 NA NA NA NA 0.1634750
5 7.625 99.875 NA NA NA 0.16435 0.1464200
6 7.875 99.875 NA NA NA 0.12195 0.1879400
..........................................................................
..........................................................................
tail(nc.df)
x y X1979.01.16 X1979.02.14 X1979.03.16 X1979.04.15 X1979.05.16
17410 37.375 66.375 NA NA NA NA NA
17411 37.625 66.375 NA NA NA NA NA
17412 37.875 66.375 NA NA NA NA NA
17413 38.125 66.375 NA NA NA NA NA
17414 38.375 66.375 NA NA NA NA NA
17415 38.625 66.375 NA NA NA NA NA
# It's actually going till 2014-01-01 and table created is exactly same as
# this one.
write.csv(nc.df, file.choose()) # which has the same result as shown above.
#2nd approach
library(ncdf4)
nc=nc_open(file.choose())
lat=ncvar_get(nc, "lat", verbose = F)
nlat=dim(lat)
lon=ncvar_get(nc, "lon")
nlon=dim(lon)
time=ncvar_get(nc, "time")
t=as.Date(time,origin="1979-01-01")
nt=dim(t)
v="soilM"
v.array=ncvar_get(nc,v)
fillvalue=ncatt_get(nc,v,"_Fillvalue")
v.array[v.array==fillvalue$value]<-NA
v.vec=as.vector(v.array)
v.mat=matrix(v.vec,nrow=nlon*nlat,ncol=nt)
dim(v.mat)
lonlat=as.matrix(expand.grid(lon,lat))
df01=data.frame(cbind(lonlat,v.mat))
names(df01)=c("lon","lat","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC")
write.table(df01,row.names = F,sep = ",")
# But this method is only giving the values of year 1979, rest is printed as # NA.
I want the table irrespective of years, i.e values only for each month FOR EVERY YEAR 1979-2014, something like that( VALUES FOR JAN, FEB, MAR, .. ONLY.)
lon lat JAN FEB MAR APR .... .... DEC
67.3 38.1 NA 0.1254 0.3554 ... ... .... NA
68.3 37.5 0.2654 NA NA .. .. .. 0.012
.........................................................................
.........................................................................