在光栅栈的所有层的替代像素值

问题描述 投票:0回答:1

我需要用光栅堆栈的帮助。我有365层光栅叠层(对应于水文年),我想与前面的最后一个层具有不同的值的值来代替与值3像素。例如,对于一个特定的像素I具有在第一层10,给值:1,1,2,3,3,3,3,2,1,1。其中的值是3,应与取代的,在这种情况下,如图2所示,这是最后的值,则“3窗口”之前的各层,从3.本不同应针对所有层进行(除,很明显,在第一一个)为每个像素。任何想法?我只是将我的光栅的矩阵和我一起工作的矩阵但这需要大量的时间。让我们假设vel_3D_snow_P4是我的基质(从光栅检索)在那里我有365行(天),更超过40个万人列(像素),我所著的代码:

vel_3D_snow_P4_back=matrix(nrow=nrow(vel_3D_snow_P4),ncol=ncol(vel_3D_snow_P4))
for (i in 1:ncol(vel_3D_snow_P4)){
  y <- which(vel_3D_snow_P4[,i]==3)
  startIndex <- y[!(y-1) %in% y]
  stopIndex <- y[!(y+1) %in% y]

  matrix=matrix(nrow=length(startIndex),ncol=2)
  matrix[,1]=startIndex
  matrix[,2]=stopIndex 

  new_vector_back=vel_3D_snow_P4[,i]
  for (j in 1:nrow(matrix)){
  if (matrix[j,1]==1) next
  new_vector_back[matrix[j,1]:matrix[j,2]]=new_vector_back[matrix[j,1]-1]
  }
vel_3D_snow_P4_back=cbind(vel_3D_snow_P4_back,new_vector_back)
print(c("fine",toString(i)))
}

但是,正如你能想象,众多的像素是不可能的!这就是为什么我被保持光栅格式要求的解决方案/主意的原因(可能使用计算的功能?)

提前致谢。

r r-raster
1个回答
0
投票

典型地,具有这样问题的第一步是在R,是编写上的向量进行操作的功能。或搜索现有之一。我的第一个谷歌查询指着我zoo::na.locf

library(zoo)
x <- c(1,1,2,3,3,3,3,2,1,1)
x[x==3] <- NA
na.locf(x)
# [1] 1 1 2 2 2 2 2 2 1 1

然后,创建例如光栅数据

library(raster)
r <- raster(ncol=10, nrow=10)
s <- stack(lapply(c(1,2,3,3,4), function(i) setValues(r, i)))

而将二者结合起来。你可以做

一种)

x <- reclassify(s, cbind(3, NA))
z <- calc(x, fun=na.locf)

要么

B)

f <- function(v) {
    v[v==3] <- NA
    na.locf(v)
}   
zz <- calc(s, f)
© www.soinside.com 2019 - 2024. All rights reserved.