Here you can use the lag() function with zoo (and panel series data):
> library(plm) > library(zoo) > data("Produc") > dnow <- pdata.frame(Produc) > x.Date <- as.Date(paste(rownames(t(as.matrix(dnow$pcap))), "-01-01", sep="")) > x <- zoo(t(as.matrix(dnow$pcap)), x.Date) > x[1:3,1:3] ALABAMA ARIZONA ARKANSAS 1970-01-01 15032.67 10148.42 7613.26 1971-01-01 15501.94 10560.54 7982.03 1972-01-01 15972.41 10977.53 8309.01
Snooze forward by 1:
> lag(x[1:3,1:3],1) ALABAMA ARIZONA ARKANSAS 1970-01-01 15501.94 10560.54 7982.03 1971-01-01 15972.41 10977.53 8309.01
Put back on 1:
> lag(x[1:3,1:3],k=-1) ALABAMA ARIZONA ARKANSAS 1971-01-01 15032.67 10148.42 7613.26 1972-01-01 15501.94 10560.54 7982.03
As Dirk mentioned, be careful with the delay value in different time series packets. Note that xts treats this differently:
> lag(as.xts(x[1:3,1:3]),k=1) ALABAMA ARIZONA ARKANSAS 1970-01-01 NA NA NA 1971-01-01 15032.67 10148.42 7613.26 1972-01-01 15501.94 10560.54 7982.03
Shane source share