删除零值或 NA 值后 R 中的斜率计算

Slope calculation in R after removing zero or NA values

我正在根据时间数据计算时间序列栅格的趋势,但由于 NA 和零值,我没有得到正确的结果。

在下面的示例中给出了像素值。由于零值,我得到的斜率值为 -23.275 而不是 3.897

time Value
1     289
2     289
3     353
4     305
5     0
6     0
7     385
8     0
9     0
10    305
11    0
12    0
13    0
14    0
15    0

correct form should be like this

Time Value
1     289
2     289
3     353
4     305
7     385
10    305

我的示例代码是

library(raster)

setwd("F:\PHD_work\Paper_work\EOS\New folder")
eos = stack(list.files(pattern='*.img'))
time = 1:nlayers(eos)
f_slope=function(x) { if (is.na(x[1])){ NA } else { m = lm(x ~ time); summary(m)$coefficients[2] }}
z = calc(eos, f_slope)
y = writeRaster(z, filename = "slope", format = "HFA")

数据在 S4 中,要使用 @

更改 z 中的值
z@data@values <- z@data@values[z@data@values  > 0]



但是由于问题中没有说,所以我也会保持正常过滤

使用dplyr

eos <- eos %>% na.omit() %>% filter(Value>0)

base

eos <- eos[complete.cases(eos),]
eos <- eos[eos$Value>0,]