【问题标题】:to create lag for Time Series Cross sectional in R在 R 中为时间序列横截面创建滞后
【发布时间】:2013-11-17 23:27:53
【问题描述】:

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

【问题讨论】:

  • Henrik,回答真的很有帮助,非常感谢。但是,当我在我的数据集上使用这个“代码”时,我收到了一个错误(可能是由于数据集的大小和变量的数量)。我正在尝试通过阅读有关 zoo 和 ddply 的更多信息来解决这个问题:(
  • 这可能是重复的:stackoverflow.com/questions/1971461/…
  • 是的,Max,我同意你的观点,这个问题似乎是重复的。但是,我试图创建 5 个滞后,但我无法使用那里的解决方案创建 5 个滞后。

标签: r


【解决方案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

【讨论】:

    【解决方案2】:

    如果你想在每个 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
    

    【讨论】:

      猜你喜欢
      • 2010-12-30
      • 2012-12-11
      • 2017-12-08
      • 2016-03-04
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2013-03-26
      • 2018-01-03
      相关资源
      最近更新 更多