我正在尝试在表示多个滞后的数据框架中创建新变量。我现在有一个时间序列“系列”,我想创建10个不同的变量,每个变量代表“系列”的一定滞后。因此,结果数据框将具有原始变量“系列”,加上10个名为(1,2,3,4,... 10)的变量,这些变量将代表滞后数。我目前正在for循环中尝试这个:
for (i in 1:max.lag){
lag.death$"i" <- lag(tscampos, i)
}
但是在这里阅读之后,我怀疑我可能想要使用其中一个应用功能?有任何想法吗?
答案 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)