【问题标题】:Undesired consequences of value replacement in raster栅格中值替换的不良后果
【发布时间】:2013-11-08 16:53:21
【问题描述】:

我正在处理基于遥感的光栅文件,请参阅她的压缩示例文件:ftp://ftp.glcf.umd.edu/glcf/GLOPEM/10_Day/011_020/1992_011_020_npp_latlon/1992_011_020_npp_latlon.tif.gz

为了进一步分析,我想将值为 -999(即水)的单元格更改为 NA。我试过了:

for (i in 1:length(nlist)){
  r=raster(nlist[i])
  calc( r , function(x) { x[ x == -999 ] <- NA; return(x) } ,overwrite=T, filename=paste(names(r),"NA_edited"), format="GTiff")
}

f2 <- function(x) {
  v <- getValues(x)
  v[v<0]<-NA
  x <- setValues(x, v)
  return(x)
}

for (i in 1:length(nlist)){
  r=raster(nlist[i])
  r=f2(r)
  writeRaster(r,filename=paste(names(r),"NA_edited"), format="GTiff",overwrite=T)
}

其中 nlist 是文件位置的向量(即 list.files())。

它们确实摆脱了 -999 并创建了 NA 值,但它们也出于某种原因更改了其他值。似乎所有值都变得略高,例如一层的最大值从 160 到 177。

是否正在进行一些插值,或者是否有一些我错过的魔力?我无法在示例栅格上重现这一点,例如raster(system.file("external/test.grd", package="raster"))。这让我觉得这可能与文件格式有关?

干杯!

【问题讨论】:

    标签: r replace raster


    【解决方案1】:

    由于您使用的是raster 包,请尝试使用函数NAvalue 来指定栅格中的NA 值,而不是手动将-999 值替换为NA 的值。

    根据?NAvalue

    NAvalue 返回用于将 NA 值写入磁盘的值(在 “光栅”类型文件)。如果设置 Raster* 对象的 NA 值, 从 a 读取值时,此值将被解释为 NA 文件。已经在内存中的值不会受到影响。

    如果 NA 值小于零,则所有值小于或等于 该数字将设置为 NA。

    帮助文件中的示例:

    r1 <- raster(system.file("external/rlogo.grd", package="raster"))
    r2 <- r1
    NAvalue(r2)
    NAvalue(r2) <- 255
    #plot(r1)
    #plot(r2)
    

    对于您的问题,您可以加载栅格(例如,r &lt;- raster(file)),然后使用函数NAvalue(r) &lt;- -999,它应该将栅格rvalues &lt;= -999 中的所有值指定为NA

    【讨论】:

    • 这样就完成了!而且比我自己的方法快得多(!)!谢谢!
    • @EndreGrünerOfstad 没问题,很高兴能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多