从大栅格堆中创建多个子集的栅格堆

3
有些难以理解。我目前有一个netcdf文件,其中包含1979-2016年每月气候平均值。我想从这个大文件中制作出单独的年栅格堆叠(即从1个栅格堆叠变成38个)。我无法找到解决方法。任何建议都将是极好的!可以在此处找到数据:http://nimbus.cos.uidaho.edu/abatz/DATA/vpd19792016.nc 我已经开始了以下工作:
  library(raster)
  library(lubridate)
  library(rgdal)
  library(tidyverse)
  library(tools)

  file = "../data/raw/climate/aet_19792016.nc" 
  file_split <- file %>%
    basename %>%
    strsplit(split = "_") %>%
    unlist
  var <- file_split[1]
  year <- substr(file_split[2], start = 1, stop = 4)
  endyear <- substr(file_split[2], start = 5, stop = 8)

  start_date <- as.Date(paste(year, "01", "01", sep = "-"))
  end_date <- as.Date(paste(ifelse(year == endyear, year, endyear), "12", "31", sep = "-"))
  date_seq <- seq(start_date, end_date, by = "1 month")
  month_seq <- month(date_seq)

  nc <- nc_open(file)
  nc_att <- attributes(nc$var)$names
  ncvar <- ncvar_get(nc, nc_att)
  tvar <- aperm(ncvar, c(3,2,1))
  proj <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0 "

  raster <- brick(tvar, crs= proj)
  extent(raster) <- c(-124.793, -67.043, 25.04186, 49.41686)
  names(raster) <- paste(var, year(date_seq),
                                     unique(month(date_seq, label = TRUE)),
                                     sep = "_")
  unstack(raster)

提前感谢任何建议!

1个回答

2

首先,您需要根据年份月份正确命名栅格堆栈:

library(ncdf4)
library(raster)

nc <- nc_open(file)
nc_att <- attributes(nc$var)$names
ncvar <- ncvar_get(nc, nc_att)
tvar <- aperm(ncvar, c(3,2,1))
proj <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0 "
r <- brick(tvar, crs= proj)
extent(r) <- c(-124.793, -67.043, 25.04186, 49.41686)
# name raster brick based on year and month
dates <- format(seq(as.Date(paste(1979,'/1/1',sep='')), as.Date(paste(2016,'/12/31', sep="")), by='month'), '%Y%m')
names(r) <- dates
r_sub <- subset(r,  grep("X1982", names(r))) # subset based on year

就是这样!非常有帮助 - 非常感谢您的回复。 - nate-m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接