| temporal_mean {ursa} | R Documentation |
Smooth value across bands using moving mean window
Description
temporal_mean is applicable for multiband raster image, where bands are regular timestamps or period. For each cell (local operation of map algebra), the values are averaged using moving window.
Usage
temporal_mean(obj, win = 7, cover = 0, verbose = FALSE)
Arguments
obj |
Object of class |
win |
Positive integer. Size of moving window. Required odd value; otherwise is coerced to the closest odd integer. |
cover |
Numeric in the interval |
verbose |
Logical. |
Details
temporal_mean is similar to function runmean(x=obj, k=win, endrule="mean") from package caTools.
Value
ursaRaster object, if obj is object of class ursaRaster.
matrix object, if obj is a matrix.
Advanced
temporal_mean is only smoothing of time-series. For time-series analysis and processing it is suggested to apply lower-level approach.
as.matrix (for ursaRaster object with argument coords=FALSE) or ursa_value return matrix with spatial component by rows and temporal component by columns. It is possible to use apply with argument MARGIN=1 to this matrix. If apply returns matrix Y, then this matrix can be coerced to ursaRaster object by calling as.ursa with argument t(Y).
X <- as.matrix(obj)
Y <- apply(X, 1, function(x) {y <- do_something_return_matrix(x); y})
res <- as.ursa(t(Y))
For example, package caTools provides some functions for manipulation with moving window.
Author(s)
Nikita Platonov platonov@sevin.ru
References
Package caTools https://CRAN.R-project.org/package=caTools
See Also
caTools::runmean (click if package caTools is installed)
Examples
session_grid(NULL)
set.seed(352)
n <- 45 # bands
m <- 3 # sample size
k <- median(seq(n))+seq(m)-(m %/% 2)-1 ## sample subset
s <- 5 # window size
a <- round(ursa_dummy(n,min=-60,max=60,elements=15,mul=1/8))
## namespace of package 'caTools' is required
if (requireNamespace("caTools")) {
b1 <- as.ursa(t(apply(as.matrix(a),1,caTools::runmean,k=s,endrule="mean")))
b2 <- temporal_mean(a,s)
print(b1[k])
print(b2[k])
print(c('identical?'=all.equal(ursa_value(b1),ursa_value(b2))))
}
a[a<(-40)] <- NA
va <- as.matrix(a) # or 'ursa_value(a)'
b3 <- temporal_mean(a,s,cover=3/4,verbose=TRUE)
b4 <- as.ursa(temporal_mean(as.matrix(va),s,cover=3/4,verbose=TRUE))
p <- list('Before moving window'=a[k]
,'After moving window'=b3[k]
,'\'temporal_mean\' to matrix'=b4[k])
print(p)
print(c('identical?'=all.equal(ursa_value(b3),ursa_value(b4))))
display(p[1:2],legend=list(list(1,"right"),list(2,"right")),decor=FALSE)