在R中,我在merge.xts中获得了多个重复的行。我怎么没有?

时间:2016-05-26 14:58:03

标签: r xts zoo as.date

我有一个列表,每个成员都是一个股票,以及历史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

任何想法???

0 个答案:

没有答案