2017-09-24 1 views
2

어려운 개념 개념이 있습니다. 현재는 1979-2016 년의 월간 평균 기후를 포함하는 netcdf 파일이 있습니다. 나는이 더 큰 것에서 분리 된 매년 래스터 스택을 만들고 싶다. (즉, 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

먼저 제대로 Yearsmonths에 따라 래스터 스택의 이름을 가지고 : 이것은

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 
+0

입니다! 슈퍼 유용한 정보 - 답장을 보내 주셔서 대단히 감사합니다. –

관련 문제