我有一个按公司(“gvkey”)和日历季度(“datafqtr”)和其他变量(例如,“day”)排序的 data.frame
gvkey datafqtr dvy
1 1001 1983Q1 0.50
2 1001 1983Q2 1.50
3 1001 1983Q3 2.00
4 1001 1983Q4 4.50
5 1002 1984Q1 0.00
6 1002 1984Q2 0.00
7 1002 1984Q3 0.10
8 1002 1984Q4 0.45
在 R 中执行以下操作的最佳方法是什么?(不一定使用动物园?)
对于这个data.frame,对于每家公司和每年,从第四季度减去第三季度,然后从第一季度减去第二季度,最后从第二季度减去第一季度。
输出应如下所示:
gvkey datafqtr dvy
1 1001 1983Q1 0.50
2 1001 1983Q2 1.00
3 1001 1983Q3 0.50
4 1001 1983Q4 2.50
5 1002 1984Q1 0.00
6 1002 1984Q2 0.00
7 1002 1984Q3 0.10
8 1002 1984Q4 0.35
我想通过以下方式做到这一点:
使用 zoo 包并滞后每个变量一次,同时将公司代码 ("gvkey") 和日历季度 (datafqtr) 作为因子,然后减去观察值。
data<-zoo(data)
data<-data[order(data[,'gvkey'],data[,'datafqtr']),]
data$lagfqtr<-lag(data$datafqtr,-1,na.pad=TRUE)
data$laggvkey<-lag(data$gvkey,-1,na.pad=TRUE)
data$lagdvy<-lag(data$dvy,-1,na.pad=TRUE)
然后我将 zoo 转换为常规 data.frame 并从非滞后变量中减去滞后变量:
data<-as.data.frame(data)
data[,] <- lapply(data[,], function(x) as.numeric(as.character(x)))
indice <- indice*1
data$divq <- data$dvy - (data$lagdvy * indice)
我不确定这是否正在做我想要的,
谢谢你,感谢你的帮助,