我试图定期制作一个不规则的多变量时间序列。我这样做是通过将不规则的时间序列(每7天一次测量)与常规的“NA”填充时间序列(每日测量)合并,如下所示:
- 约书亚乌尔里希here。
- Dirk Eddelbuettel here。
当我为多变量时间序列尝试此方法时,我收到错误:
“
colnames<-
中的错误(*tmp*
,值= c(”C.1“,”C.2“,”C.1.1“,”C.2.1“:'dimnames的长度'[2]不等于数组范围“
我的问题是2折:
代码重现错误:
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
答案 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
.....