代码之家  ›  专栏  ›  技术社区  ›  mikey

基于2个光栅重新分类光栅

  •  0
  • mikey  · 技术社区  · 7 年前

    我有两个锉刀( r1 r2 )在R中具有相同的空间范围,我想创建一个光栅( r3 )这取决于中的值 r1级 r2级 。我可以设置矩阵并使用 raster::reclassify ,但我只能使用其中一个光栅来完成此操作。我正在寻找一种在两个光栅上执行此操作的有效方法。例如(见下文)如果 r1 = 0 r2 < 2 ,则, r3 = 0.5 ,但如果 r1 = 1 r2<2. ,则, r3 = .8 。那么如果 r1=0 r2 > 2 ,则, r3 = 0.7 ,但如果 r1=1 r2>2. ,则, r3 = .9 (我还有几个条件要在实际数据上使用)。下面是代码形式的示例。

        library(raster)
        # create two random rasters
        r1 <- raster(matrix(rbinom(16, size=1, prob=.5), nrow=4))
        r2 <- raster(matrix(rpois(16, 2), nrow=4))
        # check that spatial extent is the same
        extent(r1) == extent(r2)
    
        # here is a reclassify matrix if r1==1
        reclass_m1 <- matrix(
          c(0,2,.8,
            3,5,.9
         ), ncol=3, byrow=TRUE
        )
        # reclassify matrix if r1==0
        reclass_m0 <- matrix(
          c(0,2,.5,
            3,5,.7
          ), ncol=3, byrow=TRUE
        )
    
        # so if r1==1,  I would want 
        r3 <- reclassify(r2, reclass_m1)
    
        # if r1==0, I would want 
        r3 <- reclassify(r2, reclass_m0)
        # but I want a single r3 that does this process consistently. 
    

    我看了其他类似的问题,但没有找到我想要的解决方案。我提前感谢你的帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Val Srinivas    7 年前

    如果 r1 r2 是可比较的,您可以只使用逻辑索引。如果您有一吨(或不同数量)的条件,这可能会变得有点乏味,但对于本例来说,它确实有效:

    library(raster)
    # create two random rasters
    r1 <- raster(matrix(rbinom(16, size=1, prob=.5), nrow=4))
    r2 <- raster(matrix(rpois(16, 2), nrow=4))
    # check that spatial extent is the same
    extent(r1) == extent(r2)
    
    plot(r1)
    plot(r2)
    
    # create r3 from r1
    r3 <- raster(r1)
    
    # fill based on conditions
    
    r3[r1 == 0 & r2 < 2] <- 0.5
    r3[r1 == 1 & r2 < 2] <- 0.8
    r3[r1 == 0 & r2 > 2] <- 0.7
    r3[r1 == 1 & r2 > 2] <- 0.9
    
    
    r3
    
    # class       : RasterLayer 
    # dimensions  : 4, 4, 16  (nrow, ncol, ncell)
    # resolution  : 0.25, 0.25  (x, y)
    # extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
    # coord. ref. : NA 
    # data source : in memory
    # names       : layer 
    # values      : 0.7, 0.8  (min, max)