时间序列的滞后函数

时间:2016-05-10 12:10:00

标签: r lag

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

  1. 我希望我的resultV4在第一行中为-1,基于V3。
  2. 在V3的第2行有零,所以我希望resultV4的值为-1(第1行的值)
  3. 在V3的第3行有零,所以我希望resultV4的值为-1(第1行的值)
  4. 当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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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