0

我是 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   

现在,我必须创建具有 5 个滞后的 Var1、Var2、var3、var4 和 var5,其中 var1 将滞后 1,var 2 将滞后 2,依此类推。DataCombine 库的“Slide”函数可以做到这一点工作,但我无法安装 R 2.15.3 或更高版本,Slide 适用于 >=2.15.3。

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

4

2 回答 2

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
于 2013-11-06T16:12:21.403 回答
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
于 2013-11-06T21:07:27.410 回答