删除零值或 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,]
我正在根据时间数据计算时间序列栅格的趋势,但由于 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,]