Discussion:
[R] lag operator on a zoo object - code sharing
jpm miao
2014-10-15 09:00:22 UTC
Permalink
Hi,
I could not find a nice lag operator on zoo object. Perhaps there is,
but I just couldn't find it. Basically I want the operator to return the
lagged zoo object (with one or more variables ) with the original date. For
example, if I write lag(x, -3), then I got the lagged series, but the first
three observations are deleted. My code could work, but is not polished.
Someone helps or comments?


lagzoo<-function(x, lag_n)
{

if(is.zoo(x)==FALSE)
{
stop("zoo objects for lagzoo, please")
}
if(ncol(x)==1)
{
y<-x
t<-time(x)
n<-length(t)

y[(lag_n+1):n]<-x[1:(n-lag_n)]
y[1:lag_n]<-NA
return(y)
}
else
{
y<-x
n<-nrow(x)
y[(lag_n+1):n,]<-x[1:(n-lag_n),]
y[1:lag_n,]<-NA
return(y)
}
}

[[alternative HTML version deleted]]
Achim Zeileis
2014-10-15 09:13:52 UTC
Permalink
Post by jpm miao
Hi,
I could not find a nice lag operator on zoo object. Perhaps there is,
but I just couldn't find it.
See ?lag.zoo.
Post by jpm miao
Basically I want the operator to return the
lagged zoo object (with one or more variables ) with the original date. For
example, if I write lag(x, -3), then I got the lagged series, but the first
three observations are deleted.
Set na.pad = TRUE.
Post by jpm miao
My code could work, but is not polished.
Yes, the ncol() does not work on vectors without dim and leads cannot be
computed.
Post by jpm miao
Someone helps or comments?
lagzoo<-function(x, lag_n)
{
if(is.zoo(x)==FALSE)
{
stop("zoo objects for lagzoo, please")
}
if(ncol(x)==1)
{
y<-x
t<-time(x)
n<-length(t)
y[(lag_n+1):n]<-x[1:(n-lag_n)]
y[1:lag_n]<-NA
return(y)
}
else
{
y<-x
n<-nrow(x)
y[(lag_n+1):n,]<-x[1:(n-lag_n),]
y[1:lag_n,]<-NA
return(y)
}
}
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Pascal Oettli
2014-10-15 09:17:25 UTC
Permalink
Hi,

You probably missed the "na.pad" argument of the "lag" function (for
zoo objects).
?zoo:::lag.zoo

Regards,
Pascal
Post by jpm miao
Hi,
I could not find a nice lag operator on zoo object. Perhaps there is,
but I just couldn't find it. Basically I want the operator to return the
lagged zoo object (with one or more variables ) with the original date. For
example, if I write lag(x, -3), then I got the lagged series, but the first
three observations are deleted. My code could work, but is not polished.
Someone helps or comments?
lagzoo<-function(x, lag_n)
{
if(is.zoo(x)==FALSE)
{
stop("zoo objects for lagzoo, please")
}
if(ncol(x)==1)
{
y<-x
t<-time(x)
n<-length(t)
y[(lag_n+1):n]<-x[1:(n-lag_n)]
y[1:lag_n]<-NA
return(y)
}
else
{
y<-x
n<-nrow(x)
y[(lag_n+1):n,]<-x[1:(n-lag_n),]
y[1:lag_n,]<-NA
return(y)
}
}
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Pascal Oettli
Project Scientist
JAMSTEC
Yokohama, Japan
Loading...