我正在处理基于遥感的光栅文件,请参阅她的压缩示例文件: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"))
这样的光栅上再现这个例子。这让我觉得这可能和文件格式有关吗?
干杯!
发布于 2013-11-08 11:12:17
由于您使用的是raster
包,所以尝试使用函数NAvalue
在光栅中指定NA
值,而不是用NA
来手动替换-999值。
根据?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 <= -999
作为NA
。
https://stackoverflow.com/questions/19864441
复制相似问题