"姓氏错误"合并xts时

时间:2014-10-02 13:40:52

标签: r time-series xts

我试图定期制作一个不规则的多变量时间序列。我这样做是通过将不规则的时间序列(每7天一次测量)与常规的“NA”填充时间序列(每日测量)合并,如下所示:
- 约书亚乌尔里希here
- Dirk Eddelbuettel here

当我为多变量时间序列尝试此方法时,我收到错误:

  

colnames<-中的错误(*tmp*,值= c(”C.1“,”C.2“,”C.1.1“,”C.2.1“:'dimnames的长度'[2]不等于数组范围“

我的问题是2折:

  1. 如何在不收到此错误的情况下合并这两个xts数据集?
  2. 是否有一种“更好”的方式来定期制作不规则的多变量时间序列?我想我希望在xts包中找到一个方法,但找不到一个。
  3. 代码重现错误:

    require(xts)
    set.seed(42)
    
    # make irregular index 
    irr_index <- seq(from=as.Date("2010-01-19"), length.out=10, by=7)
    
    # make irregular xts
    irr_xts <- xts( x= matrix( data= rnorm(20), ncol= 2,
            dimnames= list(c(1:length(irr_index)),
                               c("C.1", "C.2"))),
            order.by= irr_index)
    
    # make regular index 
    reg_index <- seq(from=as.Date(start(irr_xts)), to=as.Date(end(irr_xts)), by=1)
    
    empty <- xts(matrix(data = NA, 
            nrow = length(reg_index), 
            ncol = ncol(irr_xts)), 
            reg_index )     
    
    reg_xts <- na.fill(merge(irr_xts, empty), fill=0)
    

    在实践中,我的真实数据是零星的,有时是每天,有时会跳过几天。我的方法是将所有数据标准化为每天1次观察,其中0为缺失值的天数。

    提前致谢。

    编辑:
    这是我要求的sessionInfo()

    R version 3.0.2 (2013-09-25)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    
    locale:
    [1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252  LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
    [5] LC_TIME=English_United States.1252    
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] xts_0.9-7  zoo_1.7-10
    
    loaded via a namespace (and not attached):
    [1] grid_3.0.2      lattice_0.20-24 tools_3.0.2    
    

1 个答案:

答案 0 :(得分:2)

这对我来说很好,我只关注Joshua Ulrich链接:

empty <- xts(,reg_index )       ## No need to set coredata to create empty xts
merge(irr_xts, empty, fill=0)

                C.1     C.2
2010-01-19 1.370958 1.30487
2010-01-20 0.000000 0.00000
2010-01-21 0.000000 0.00000
2010-01-22 0.000000 0.00000
2010-01-23 0.000000 0.00000
2010-01-24 0.000000 0.00000
.....