【发布时间】:2018-08-28 19:56:30
【问题描述】:
我有一个包含股票回报数据的大型不平衡数据集(大约 2000 只股票),现在我想重新排列回报数据,所以它们都在同一日期结束。
我的数据如下所示:
Date RF STOCK-A STOCK-B STOCK-C STOCK-D
1990-11-30 0,03 0,20 0,30 -0,40 0,90
1990-12-31 0,10 0,30 0,30 -0,40 0,34
1991-01-31 0,12 0,90 0,30 -0,60 0,78
1991-02-28 0,03 0,12 0,30 NA 0,50
1991-03-31 0,04 0,14 0,30 NA 0,12
1991-04-30 0,05 0,18 0,30 NA 0,11
1991-05-31 0,03 0,00 NA NA NA
1991-06-30 0,00 0,20 NA NA NA
我的问题是,我希望所有股票收益都以 1991-06-30 结束,并在早期填写 NA,所以它看起来像这样:
Date RF STOCK-A STOCK-B STOCK-C STOCK-D
1990-11-30 0,03 0,20 NA - NA NA
1990-12-31 0,10 0,30 NA NA NA
1991-01-31 0,12 0,90 0,30 NA 0,90
1991-02-28 0,03 0,12 0,30 NA 0,34
1991-03-31 0,04 0,14 0,30 NA 0,78
1991-04-30 0,05 0,18 0,30 -0,40 0,50
1991-05-31 0,03 0,00 0,30 -0,40 0,12
1991-06-30 0,00 0,20 0,30 -0,60 0,11
我尝试使用这样的滞后功能:
data2 <- if (any(is.na(data$STOCK-B))==TRUE){
lag(data$STOCK-B, k= -sum(is.na(data$STOCK-B)))
}else {
any(is.na(data$STOCK-B)==FALSE)
lag(data$STOCK-B, k=0)
}
我的想法是在 for 循环中实现它,但它不起作用,只是返回一个原子向量。
我找到了另一种使用 DataCombine 包的方法:
Data1 <- slide(data, Var = "data$STOCK-B", slideBy = -sum(is.na(data$STOCK-
B)))
它根据需要向下移动数据,但在数据集中输入一个新变量。当然,我可以使用那个方法,然后将新的变量提取到一个新的数据集中,但这如何使它更有效呢?
提前谢谢你!!
【问题讨论】: