数据滞后.表中是时间序列面板数据



我试图使用滞后和数据表符号来滞后变量,以便它是最快的。这就是我想要做的,

head(DT)
setkey(DT,code,year)

输出为

<>之前代码年份pt_N_1y ws_country关闭is_msci1: 130104 2003 0以色列002: 130104 2004 0以色列003: 130104 2005 0以色列004:130 0104 2006 0以色列005: 130104 2007 0以色列006: 130104 2008 0以色列00之前
DT[,L1_is_msci:=.SD[lag(is_msci,1)],by=code]

给出50个警告并给出所有的NA.SD不是应该通过"代码"对数据进行子集并应用函数lag(is_msci, 1)吗?理想情况下,我希望使用1行函数来处理滞后,并希望使用base函数和数据表符号,因为它是处理大型数据集而无需安装许多包的最佳方法。这可能吗?

我想达到的是

<>之前代码年份pt_N_1y ws_country关闭is_msci L1_is_msci[01:130104 2003 0以色列00 na。2: 130104 2004 0以色列00 003: 130104 2005 0以色列00 004:13 0104 2006 0以色列00 0005:130104 2007 0以色列00 006: 130104 2008 0以色列00 00

将来,请提供一个可复制的示例 -我们可以从中复制/粘贴代码以获取数据。

我不确定你使用的lag函数-你没有显示它。基础函数lag(来自stats)似乎做了一些不同的事情。如果你这样做了,难怪你的结果和你期望的不一样。测试您正在使用的函数非常容易:

# base function from package stats
lag(1:5, k=1L)
# [1] 1 2 3 4 5
# attr(,"tsp")
# [1] 0 4 1

显然不是我们想要的。那么,让我们编写自己的函数:

lag <- function(x, n)
    if (n == 0) x else c(rep.int(NA, n), head(x, -n))
# test it
lag(1:5, 0)
# [1] 1 2 3 4 5
lag(1:5, 2)
# [1] NA NA  1  2  3
现在,您可以应用@eddi的代码:
DT[, L1_is_msci := lag(is_msci, 1L), by = code]
#      code year pt_N_1y ws_country close is_msci L1_is_msci
# 1: 130104 2003       0     ISRAEL     0       0         NA
# 2: 130104 2004       0     ISRAEL     0       0          0
# 3: 130104 2005       0     ISRAEL     0       0          0
# 4: 130104 2006       0     ISRAEL     0       0          0
# 5: 130104 2007       0     ISRAEL     0       0          0
# 6: 130104 2008       0     ISRAEL     0       0          0

HTH

最新更新