首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将R代码中小于0的栅格值替换为NA

如何将R代码中小于0的栅格值替换为NA
EN

Stack Overflow用户
提问于 2016-05-01 06:33:08
回答 5查看 34.1K关注 0票数 14

我正在使用陆地卫星图像来计算净辐射。在我转换的反射栅格层中有非常低的负值(例如:-0.000003)。我希望确保我的反射率为0-1,以减少将来计算中的误差。

如何在R中将小于0的光栅值替换为"NA“,类似于光栅计算函数。我不确定如何提供一个例子,但我相信你们中的一个人可以帮助我,对吗?

这是我从Bastiaanssen等人那里得到的反射率公式。(1998)

假设pb1表示陆地卫星波段1的反射率,pi =3.14…,lb1 =波段1的辐射度,ESUN =波段1的大气层外值,dr =一年中某一天的相对地太阳距离。

#Calculate reflectivity per band. QC: Always 0 to 1
pb1 = (pi * lb1)/(ESUN1 * cos(solzen) * dr)

创建这个栅格后,我要做的就是将小于0的pb1值设置为NA。

帮助?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-01 06:52:37

library(raster)

values(pb1)[values(pb1) < 0] = NA

或者,正如@jbaum所建议的:

pb1[pb1 < 0] <- NA

如果要保留原始栅格对象,请记住在运行上述代码之前将原始栅格指定为新的对象名称。

票数 25
EN

Stack Overflow用户

发布于 2018-03-08 03:37:45

内存安全的方法是使用reclassify

library(raster)
r <- raster(ncol=10, nrow=10)
values(r) <- rnorm(100)
x <- reclassify(r, cbind(-Inf, 0, NA), right=FALSE)

请注意,right=FALSE不会将0的值设置为NA。

reclassify的另一个优点是您可以提供文件名参数。

票数 33
EN

Stack Overflow用户

发布于 2019-05-15 07:19:17

raster::clamp是一种简单而灵活的方式来实现这一点。可以将高于和/或低于阈值的所有内容设置为该阈值,或者通过设置useValues=FALSE,然后将高于/低于阈值的值设置为NA。例如,仅限较低的值:

r <- raster(ncol=3, nrow=3)
values(r) <- seq_len(9)
x <- clamp(r, lower=3, useValues=FALSE)
values(x)
# [1] NA NA  3  4  5  6  7  8  9

仅限上限值:

x <- clamp(r, upper=6, useValues=FALSE)
values(x)
# [1]  1  2  3  4  5  6 NA NA NA

和上限和下限值:

x <- clamp(r, lower=3, upper=6, useValues=FALSE)
values(x)
# [1] NA NA  3  4  5  6 NA NA NA

注意useValues=TRUE (默认值)时的区别:

x <- clamp(r, lower=3, upper=6)
values(x)
# [1] 3 3 3 4 5 6 6 6 6

在本例中使用raster_2.8-19

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36960974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档