如何创建多个不同的滞后

时间:2014-11-18 19:26:06

标签: r time-series

我正在尝试在表示多个滞后的数据框架中创建新变量。我现在有一个时间序列“系列”,我想创建10个不同的变量,每个变量代表“系列”的一定滞后。因此,结果数据框将具有原始变量“系列”,加上10个名为(1,2,3,4,... 10)的变量,这些变量将代表滞后数。我目前正在for循环中尝试这个:

for (i in 1:max.lag){
  lag.death$"i" <- lag(tscampos, i)
}

但是在这里阅读之后,我怀疑我可能想要使用其中一个应用功能?有任何想法吗?

2 个答案:

答案 0 :(得分:2)

你去了:这个功能可以让你在需要的时候得到你的系列的滞后版本。 ('比我在10个不同的列中存储同一系列的每个滞后复制品更好)

lag.death = data.frame(series = floor(runif(10,0,100)));
lag.death$serie

lagit4me = function(serie,lag){
    n = length(serie);
    pad = rep(0,lag);
    return(c(pad,serie)[1:n]);
}


lagit4me(lag.death$serie,1);
lagit4me(lag.death$serie,3);

'可以调整它然后允许负滞后等等。

(但如果你真的需要它:)

allIn1 = lapply(0:10,lagit4me,serie=lag.death$series);
allIn1 = data.frame(allIn1);
names(allIn1) = 0:10;
allIn1

享受:)

答案 1 :(得分:0)

你也可以使用purrr :: map(),类似于上面的lapply()。这使用dplyr :: lag()而不是lagit4me()

library(dplyr)
library(purrr)

num.lags <- 0:10 

list.lags <- 
  purrr::map(
    .x = num.lags,
    .f = ~ dplyr::lag(series, .x)
  )

注意,您需要将列表元素命名为强制转换为data_frame

chr.lags <- paste0("lag_", num.series.lags)
names(list.model.subset.lags) <- chr.lags

tbl.model.subset.lags <- 
  dplyr::bind_rows(list.model.subset.lags)

这会产生一个包含11个变量的tbl,输入变量(lag_0)和10个滞后变量(带有NA)

print(tbl.model.subset.lags)