我正在使用陆地卫星图像来计算净辐射。在我转换的反射栅格层中有非常低的负值(例如:-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。
帮助?
发布于 2016-05-01 06:52:37
library(raster)
values(pb1)[values(pb1) < 0] = NA
或者,正如@jbaum所建议的:
pb1[pb1 < 0] <- NA
如果要保留原始栅格对象,请记住在运行上述代码之前将原始栅格指定为新的对象名称。
发布于 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
的另一个优点是您可以提供文件名参数。
发布于 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
。
https://stackoverflow.com/questions/36960974
复制相似问题