在R数据表中滞后财务数据

时间:2019-05-28 17:30:47

标签: r

我有一个包含服务器财务数据的数据集,其中包括一些基本知识。例如,我从4月获得了债务数据,但实际上应该说是12月。由于它们是在稍后的时间点发布的,因此我不得不将其滞后以进行审批。 4铢

这就是我的数据(插图)

k <- c("gvkey1" , "gvkey1" , "gvkey1" , "gvkey1", "gvkey2", "gvkey2", "gvkey2", "gvkey2", "gvkey2", "gvkey3", "gvkey3")

l <- c("Date1", "Date2", "Date3", "Date4" , "Date5" , "Date6" , "Date7" , "Date8" , "Date9" , "Date10" , "Date11" )
m <- c(1:11)

y <- structure(list(a = l, b = k, c = m), .Names = c("Date", "gvkey" , "DLCQ"),
               row.names = c(NA, -11L), class = "data.frame")
     Date  gvkey DLCQ
1   Date1 gvkey1    1
2   Date2 gvkey1    2
3   Date3 gvkey1    3
4   Date4 gvkey1    4
5   Date5 gvkey2    5
6   Date6 gvkey2    6
7   Date7 gvkey2    7
8   Date8 gvkey2    8
9   Date9 gvkey2    9
10 Date10 gvkey3   10
11 Date11 gvkey3   11

这是我已经尝试过的代码:

x <- shift(y$DLCQ, 4L)

但是,这给了我一个单一的向量,并基本上“删除”了所有其他列(日期,gvkey)。

[1] NA NA NA NA  1  2  3  4  5  6  7

它看起来应该像这样:

     Date  gvkey DLCQ
1   Date1 gvkey1    NA
2   Date2 gvkey1    NA
3   Date3 gvkey1    NA
4   Date4 gvkey1    NA
5   Date5 gvkey2    1
6   Date6 gvkey2    2
7   Date7 gvkey2    3
8   Date8 gvkey2    4
9   Date9 gvkey2    5
10 Date10 gvkey3    6
11 Date11 gvkey3    7

此外,由于我的数据采用长格式,因此代码应分别针对每个gvkey运行(例如,使用,by = gvkey)。

谢谢 约翰内斯

1 个答案:

答案 0 :(得分:0)

所以你想要这个吗?

y[,DLCQ := shift(DLCQ, 4L), by = gvkey]

> y
      Date  gvkey DLCQ
 1:  Date1 gvkey1   NA
 2:  Date2 gvkey1   NA
 3:  Date3 gvkey1   NA
 4:  Date4 gvkey1   NA
 5:  Date5 gvkey2   NA
 6:  Date6 gvkey2   NA
 7:  Date7 gvkey2   NA
 8:  Date8 gvkey2   NA
 9:  Date9 gvkey2    5
10: Date10 gvkey3   NA
11: Date11 gvkey3   NA

主要有{​​{1}},因为只有NA具有多于4条记录。而且请注意,您数据中的gvkey2未分组。