1

我正在使用基于遥感的光栅文件,请参阅她的压缩示例文件: 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")). 这让我觉得它可能与文件格式有关?

干杯!

4

1 回答 1

2

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

根据?NAvalue

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

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

帮助文件中的示例:

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

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

于 2013-11-08T19:12:17.097 回答