如何从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
来实现此目的?
答案 0 :(得分:0)
就输出结构而言,目前尚不清楚您到底追求什么。
你可以
d <- r > .75
names(d) <- Dates$Date
plot(d)
如果数据适合内存,则可以执行以下操作(如果不能,则可以分块执行,但是列表可能会很大)。
a <- apply(as.matrix(d), 1, which)
head(a)