我有一个大的不 balancer 数据集(大约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)))
它会根据需要向下移动数据,但会在数据集中输入新变量 . 当然,我可以使用该方法,然后将新变量提取到新数据集中,但这如何使其更有效?
先感谢您!!
3 回答
对于每个列,将AU与非NA连接起来:
赠送:
另一种甚至更短的
moveNA
将是:注意
使用的可重复形式的输入
data
是:我们可以定义一个函数来帮助排序,然后使用
dplyr
包中的mutate_at
对每列进行排序 .DATA
我会使用
apply
函数:DATA