我是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中执行此操作。
答案 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