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