我有一个包含服务器财务数据的数据集,其中包括一些基本知识。例如,我从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)。
谢谢 约翰内斯
答案 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
未分组。