R 如何创建多个不同的滞后

R 如何创建多个不同的滞后,r,time-series,R,Time Series,我试图在数据框中创建表示多个滞后的新变量。我现在有一个时间序列“序列”,我想创建10个不同的变量,每个变量代表“序列”的某个滞后。因此,生成的数据帧将包含原始变量“series”,加上10个名为(1,2,3,4,…10)的变量,这些变量将表示滞后的数量。我目前正在for循环中尝试此操作: for (i in 1:max.lag){ lag.death$"i" <- lag(tscampos, i) } for(1中的i:最大滞后){ lag.death$“i”好了:这个函数可以让你在

我试图在数据框中创建表示多个滞后的新变量。我现在有一个时间序列“序列”,我想创建10个不同的变量,每个变量代表“序列”的某个滞后。因此,生成的数据帧将包含原始变量“series”,加上10个名为(1,2,3,4,…10)的变量,这些变量将表示滞后的数量。我目前正在for循环中尝试此操作:

for (i in 1:max.lag){
  lag.death$"i" <- lag(tscampos, i)
}
for(1中的i:最大滞后){

lag.death$“i”好了:这个函数可以让你在需要的时候得到一个序列的延迟版本。((比把同一序列的每个延迟副本存储在10个不同的列中要好)

“然后可以调整它以允许负滞后或其他

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


享受:)

您也可以使用purr::map(),类似于上面的lappy()。它使用dplyr::lag(),而不是lagit4me()


你想在超出时间范围时用零填充边吗?
*apply
可能是一个解决方案,但如果我是你,我宁愿编写一个函数,在你需要的任何时候为你完成这项工作,而不是存储同一系列的10个延迟版本..等一分钟;)等一分钟,你是在说实际的R吗ag
函数?如果是,此函数返回一个滞后的“时间序列对象”,该对象一旦卡在data.frame中,就与原始对象完全相同。如果确实需要存储10个滞后版本的“series”,则将其放入一个带有
Lappy(0:9,滞后,x=lag.death$series)的列表中
。我以前有过这个问题。当我想在分析中使用滞后时,我倾向于为我需要的每个滞后添加新的变量。然而,我发现,对于我们在时间序列中使用的大多数R函数,它具有处理滞后的能力,并且你可以在函数中找到滞后的数量作为一个选项。因此,你所需要的只是你的or原始变量和日期一起表示时间序列。仅供参考,您不需要任何分号也不需要,只是一种习惯。我喜欢看到指令的结尾:)谢谢。我确实需要将延迟存储为新变量。第二段代码不适合我-尝试将allIn1指定为数据帧会引发错误(参数表示不同的行数)这是因为我没有使
lagit4me
能够检查滞后系列的最终长度,它必须始终是
n
,但如果滞后较大,可能会更多。我今晚将添加此检查,或者您以前可能会这样做;)给您(函数编辑),现在是否工作得更好?
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
library(dplyr)
library(purrr)

num.lags <- 0:10 

list.lags <- 
  purrr::map(
    .x = num.lags,
    .f = ~ dplyr::lag(series, .x)
  )
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)
print(tbl.model.subset.lags)