【问题标题】:how to sum raster layer to raster stack R如何将栅格图层和栅格堆栈R相加
【发布时间】:2021-10-12 16:46:55
【问题描述】:

我正在处理一个包含 300 个 SGS 的栅格堆栈 sims 和一个栅格图层 trend。我正在尝试将trend 与堆栈中的每个栅格层相加。我的最终目标是使用趋势图创建一个新的模拟栅格堆栈,以便我可以执行其他操作。

我正在寻找的东西是这样的:

sims1 <- sims + trend

这样每一层都会有点像这样:

>names(sims1)
[1] "sim1+trend" "sim2+trend" "sim3+trend" "sim4+trend"...

【问题讨论】:

    标签: r r-raster gstat


    【解决方案1】:

    R 中的操作通常通过循环短变量进行矢量化。这样就可以了

    1:3 + 10
    #[1] 11 12 13
    

    这同样适用于栅格数据。

    示例数据:

    library(raster)
    sims <- stack(system.file("external/rlogo.grd", package="raster")) 
    trend <- raster(sims)
    values(trend) <- 1:ncell(trend)
    

    解决方案:

    x <- sims + trend
    names(x) <- paste0(names(sims), ".trend")
    
    x
    #class      : RasterBrick 
    #dimensions : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
    #resolution : 1, 1  (x, y)
    #extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
    #crs        : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
    #source     : memory
    #names      : red.trend, green.trend, blue.trend 
    #min values :       256,         256,        256 
    #max values :      8032,        8032,       8032 
    

    【讨论】:

      【解决方案2】:
      list_sims <- list() # list to save sums 
      for (i in 1:nlayers(sims)) { 
             list_sims[[i]] <- sims[[i]] + trend 
      }
      sims1 <- stack(list_sims) 
      

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        • 2015-02-13
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 2021-10-22
        相关资源
        最近更新 更多