为R中的时间序列横截面创建滞后

时间:2013-11-06 16:07:19

标签: r

我是R的新手并从SAS搬来 我有时间序列横截面数据,每个ID有24个月。像

这样的快照
ID Time Var  
1 201201 2.5  
1 201202 3.2  
1 201203 4.1  
1 201204 3.2  
1 201205 4.1  
2 201201 1.8  
2 201202 5.6  
2 201203 4.5  
2 201204 9.2  
2 201205 8.1   

现在,我必须创建Var1,Var2,var3,var4和var5,其中5个滞后,其中var1将滞后1,var 2将滞后2,因此对于DataCombine库的''Slide'函数可以做这个工作,但我不能安装R 2.15.3或更高版本,Slide适用于> = 2.15.3。

你能帮我解决这个问题吗?在SAS中,我可以使用Proc Panel完成此操作,但我不知道如何在R中执行此操作。

2 个答案:

答案 0 :(得分:1)

也许您正在寻找embed

# copy sample data to clipboard
df <- read.table(text=readClipboard(), header=TRUE)
embed(df$Var, 5)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]  4.1  3.2  4.1  3.2  2.5
# [2,]  1.8  4.1  3.2  4.1  3.2
# [3,]  5.6  1.8  4.1  3.2  4.1
# [4,]  4.5  5.6  1.8  4.1  3.2
# [5,]  9.2  4.5  5.6  1.8  4.1
# [6,]  8.1  9.2  4.5  5.6  1.8

答案 1 :(得分:0)

如果您想在每个ID中滞后,可以试试这个:

library(plyr)
library(zoo)
df2 <- ddply(.data = df, .variables = .(ID), function(x){
  lag(zoo(x$Var), k = 0:4)
})
df2
#    ID lag0 lag1 lag2 lag3 lag4
# 1   1  2.5  3.2  4.1  3.2  4.1
# 2   1  3.2  4.1  3.2  4.1   NA
# 3   1  4.1  3.2  4.1   NA   NA
# 4   1  3.2  4.1   NA   NA   NA
# 5   1  4.1   NA   NA   NA   NA
# 6   2  1.8  5.6  4.5  9.2  8.1
# 7   2  5.6  4.5  9.2  8.1   NA
# 8   2  4.5  9.2  8.1   NA   NA
# 9   2  9.2  8.1   NA   NA   NA
# 10  2  8.1   NA   NA   NA   NA