时间序列的滞后函数

Lag function for time series

我有一个关于滞后函数的问题,我无法在 R 中解决。我在数据帧 'V3' 中有一个变量,它是一个非常大的数据文件的时间序列。 'resultV4' 是我想要完成的(参见代码片段)。

  1. 我希望我的resultV4在第一行是-1,基于V3。
  2. 在V3的第二行有一个零,所以我希望resultV4的值为-1(第一行的值)
  3. 在V3的第3行有一个零,所以我希望resultV4的值为-1(第1行的值)

当V3的值发生变化时,在本例中为第6行的1,我希望resultV4为1。第7行是另一个0,所以我希望这是V3中第6行的值, 即 1. 依此类推..

V3<-c(-1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,-1,0,0)
resultV4<-c(-1,-1,-1,-1,-1,1,1,1,1,1,-1,-1,-1)
df<-cbind(V3,resultV4)

提前感谢您的任何建议。

干杯,

PCdL

resultV4 <- V3
for(i in seq_along(V3)) { if(resultV4[i] == 0) resultV4[i] = resultV4[i-1] }
resultV4
[1] -1 -1 -1 -1 -1  1  1  1  1  1 -1 -1 -1 -1 -1 -1 -1 -1

您可以使用包 zoo 中的 na.locf

library(zoo)

V3 <- c(-1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,-1,0,0)
V3_adj <- V3

用 NA 替换 0

my_zero <- which(V3 == 0)

V3_adj[my_zero] <- NA

继续上次观察

resultV4 <- na.locf(V3_adj)

cbind(V3, V3_adj, resultV4)

结果:

     V3 V3_adj resultV4
 [1,] -1     -1       -1
 [2,]  0     NA       -1
 [3,]  0     NA       -1
 [4,]  0     NA       -1
 [5,]  0     NA       -1
 [6,]  1      1        1
 [7,]  0     NA        1
 [8,]  0     NA        1
 [9,]  0     NA        1
[10,]  0     NA        1
[11,] -1     -1       -1
[12,]  0     NA       -1
[13,]  0     NA       -1
[14,]  0     NA       -1
[15,]  0     NA       -1
[16,] -1     -1       -1
[17,]  0     NA       -1
[18,]  0     NA       -1