我有一个列表,每个成员都是一个股票,以及历史bloomberg数据的各个领域。例如:
> head(isData[[2]])
date CUR_MKT_CAP OPERATING_INCOME_SEQ_GROWTH OPER_ROE PX_LAST SHORT_AND_LONG_TERM_DEBT
1 1999-12-31 NA NA NA 62.33 NA
2 2000-01-01 NA NA NA 62.33 NA
3 2000-01-02 NA NA NA 62.33 NA
4 2000-01-03 NA NA NA 62.93 NA
5 2000-01-04 NA NA NA 61.88 NA
我正在从这个列表中创建5个xts对象,每个对象包含过去每天每个股票的特定数据点:
oigIS <- do.call(merge.xts, lapply(isData, function(x) {
if(!(is.null(x$OPERATING_INCOME_SEQ_GROWTH)))
xts(x$OPERATING_INCOME_SEQ_GROWTH/100, order.by = x[,1])
}))
这很有效,可以按照我的预期创建一个结构:
> head(oigIS)[,1:5]
ALPI.IS.Equity ACC.IS.Equity AHOT.IS.Equity AJP.IS.Equity X3M.IS.Equity
1999-12-31 NA NA NA NA 1.712294
2000-01-01 NA NA NA NA 1.712294
2000-01-02 NA NA NA NA 1.712294
2000-01-03 NA NA NA NA 1.712294
2000-01-04 NA NA NA NA 1.712294
2000-01-05 NA NA NA NA 1.712294
但是,这会在某些日期创建重复的条目:
> head(oigIS['200301/200302'],10)[,1:5]
ALPI.IS.Equity ACC.IS.Equity AHOT.IS.Equity AJP.IS.Equity X3M.IS.Equity
2003-01-01 NA NA NA NA 0.133008
2003-01-01 NA NA NA NA NA
2003-01-02 NA NA NA NA 0.133008
2003-01-02 NA NA NA NA NA
2003-01-03 NA NA NA NA 0.133008
2003-01-03 NA NA NA NA NA
2003-01-04 NA NA NA NA 0.133008
2003-01-04 NA NA NA NA NA
2003-01-05 NA NA NA NA 0.133008
2003-01-05 NA NA NA NA NA
那么我该怎么做呢?
我认为时间不能匹配或者有些废话,所以我试图剥夺时间:
oigIS <- do.call(merge.xts, lapply(isData, function(x) {
if(!(is.null(x$OPERATING_INCOME_SEQ_GROWTH)))
xts(x$OPERATING_INCOME_SEQ_GROWTH/100, order.by = as.Date(format(x[,1], '%Y-%m-%d')))
}))
但这不起作用:
> head(oigIS['200301/200302'],10)[,8:13]
X3M.IS.Equity ALST.IS.Equity AKOP.IS.Equity ADCIC.IS.Equity ABAN.IS.Equity AMRJ.IS.Equity
2003-01-01 0.133008 NA NA 0.086917 NA 0.175158
2003-01-01 NA NA NA NA NA NA
2003-01-02 0.133008 NA NA 0.086917 NA 0.175158
2003-01-02 NA NA NA NA NA NA
2003-01-03 0.133008 NA NA 0.086917 NA 0.175158
2003-01-03 NA NA NA NA NA NA
2003-01-04 0.133008 NA NA 0.086917 NA 0.175158
2003-01-04 NA NA NA NA NA NA
2003-01-05 0.133008 NA NA 0.086917 NA 0.175158
2003-01-05 NA NA NA NA NA NA
任何想法???