当栅格像元的值大于栅格中的某个阈值时,如何获取每个栅格像元的日期?

时间:2018-09-26 05:37:09

标签: r raster

如何从rabrickbr rdt创建rabrickbrick r,以便rdt显示一年中的哪一天网格单元格值大于或等于{{1}在以下示例中。 图书馆(光栅)

0.75

使用this示例,我可以通过以下函数获取最大网格单元格值的日期。

# 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)
names(r.dt)<-Date_val
 plot(r.dt)
indices <- format(as.Date(getZ(r.dt), format = "%Y-%b-%d"), format = "%Y")

在这里,我不希望最大值的日期,而是网格单元格值大于0.75的日期。我该如何修改函数dtmx <- function (x,...) { if(all(is.na(x))) {result <- 0 } else {result <- which.max(x)} return(result) } dtmxv <- stackApply(r.dt, indices, dtmx) dtmxv 来实现此目的?

1 个答案:

答案 0 :(得分:0)

就输出结构而言,目前尚不清楚您到底追求什么。

你可以

d <- r > .75
names(d) <- Dates$Date
plot(d)

如果数据适合内存,则可以执行以下操作(如果不能,则可以分块执行,但是列表可能会很大)。

a <- apply(as.matrix(d), 1, which)
head(a)