Запись ежемесячного NetCDF в CSV в R, но не может получить таблицу месяца - PullRequest
0 голосов
/ 20 июня 2019

Я новичок в 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
.........................................................................
.........................................................................
...