[ACCEPTED]-Lagging Variables in R-time-series
You can achieve this using the built-in 8 embed()
function, where its second 'dimension' argument 7 is equivalent to what you've called 'lag':
x <- c(NA,NA,1,2,3,4)
embed(x,3)
## returns
[,1] [,2] [,3]
[1,] 1 NA NA
[2,] 2 1 NA
[3,] 3 2 1
[4,] 4 3 2
embed()
was 6 discussed in a previous answer by Joshua Reich. (Note 5 that I prepended x with NAs to replicate 4 your desired output).
It's not particularly 3 well-named but it is quite useful and powerful 2 for operations involving sliding windows, such 1 as rolling sums and moving averages.
Use a proper class
for your objects; base R has 11 ts
which has a lag()
function to operate on. Note 10 that these ts
objects came from a time when 9 'delta' or 'frequency' where constant: monthly 8 or quarterly data as in macroeconomic series.
For 7 irregular data such as (business-)daily, use 6 the zoo or xts packages which can also deal (very 5 well!) with lags. To go further from there, you 4 can use packages like dynlm or dlm allow for dynamic 3 regression models with lags.
The Task Views 2 on Time Series, Econometrics, Finance all 1 have further pointers.
The running
function in the gtools
package does more 1 or less what you want:
> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)
$`1:1`
[1] 1
$`1:2`
[1] 1 2
$`1:3`
[1] 1 2 3
$`2:4`
[1] 2 3 4
The method that works best for me
is to 1 use the lag
function from the dplyr
package.
Example:
> require(dplyr)
> lag(1:10, 1)
[1] NA 1 2 3 4 5 6 7 8 9
> lag(1:10, 2)
[1] NA NA 1 2 3 4 5 6 7 8
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.