如何获得rasterbrick年度最大网格单元值的日期?

时间:2018-03-21 07:07:24

标签: r time-series raster r-raster

如何获得两个栅格,每年为每个网格单元格提供最大值,并给出最大值发生的日期。下面是我可以实现的一些步骤的可重现的例子。

library(raster)

# Create a raster

r1 <- raster(nrow=10, ncol=7)
r <- stack(setValues(r1, runif(ncell(r1))),
           setValues(r1, runif(70 ,0.6,0.9)),
           setValues(r1, runif(70 ,0.2,0.4)),
           setValues(r1, runif(70 ,1,2)),
           setValues(r1, runif(70 ,0.5,1.0)),
           setValues(r1, runif(70 ,0.3,0.9)),
           setValues(r1, runif(70 ,1,2)))
r

# Make Dates. This is random, i have about 24000 values.

Dates<-data.frame(Date=c("2000-01-02","2000-01-03","2000-02-03",
           "2001-09-02","2001-09-03","2001-10-01",
           "2001-10-02"))

Date_val<-as.Date(Dates$Date,format="%Y-%m-%d")
Date_val

r.dt<-setZ(r,Date_val)

# Get indices to make annual maxima value for each grid cells

indices <- format(as.Date(getZ(r.dt), format = "%Y-%b-%d"), format = "%Y")

# Implement stackApply to get maximum value each year.

rmax<-stackApply(r.dt,indices = indices,fun=max,na.rm=T)
plot(rmax)

1 个答案:

答案 0 :(得分:1)

你可以做到

wmax <- stackApply(r.dt, indices = indices, fun=function(i,...) which.max(i))

获取引用日期向量的索引

要获得(整数)日期表示,即自1970-01-01以来的天数,您可以为每年做这样的事情

m2000 = data.frame(from=1:3, to=as.integer(Date_val)[1:3])
x <- subs(wmax[[1]], m2000)