检查是否需要添加新的时间段,并在需要时添加

时间:2017-03-03 14:27:49

标签: r time-series

我为瑞典同质化Business and Consumer survey的问题答案提供时间序列。我现在正在使用Eviews更新系列,但希望能够在R中执行此操作。

在这个简化的例子中,我有3个问题,我们在过去的不同日期开始询问。

temp <- c(1:98)
q1 <- ts(temp,start=c(2009,1),frequency = 12)
temp <- c(1:122)
q2 <- ts(temp,start=c(2007,1),frequency = 12)
temp <- c(1:136)
q3 <- ts(temp,start=c(2005,11),frequency = 12)
print(q1)


     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009   1   2   3   4   5   6   7   8   9  10  11  12
2010  13  14  15  16  17  18  19  20  21  22  23  24
2011  25  26  27  28  29  30  31  32  33  34  35  36
2012  37  38  39  40  41  42  43  44  45  46  47  48
2013  49  50  51  52  53  54  55  56  57  58  59  60
2014  61  62  63  64  65  66  67  68  69  70  71  72
2015  73  74  75  76  77  78  79  80  81  82  83  84
2016  85  86  87  88  89  90  91  92  93  94  95  96
2017  97  98 

我们每月两次更新这些系列的结果。首先,我们计算初步结果,然后计算确定结果。今天更新系列的代码检查工作文件(Eviews文件格式)中是否存在句点,如果不存在则添加它。然后它选择(样本)那个时期(月),任何新值都会到那个月。

我想以类似的方式做到这一点。

假设我在2017年3月做了预备,2017年3月将为这三个系列投入q1 = 100,q2 = 99和q3 = 27的值。

我查看了this question,但只更新了ts-vector中编号的地方,而不是基于月份而不是添加新的时段。

1 个答案:

答案 0 :(得分:1)

这是一个解决问题的功能:

tsenter <- function(series,year,month,value)
{
  startper <- start(series)
  endper <- end(series)

  if(startper[1]==year)
  {
    periods <-month - startper[2]+1
  }
  else if(startper[1]+1==year)
  {
    periods <- 12-startper[2]+1+month
  }
  else
  {
    periods <- 12-startper[2]+1+month+(year-startper[1]-1)*12
  }
  if(periods>0)
  {
    if(endper[1]<year || (endper[1]==year && endper[2]<month))
    {
      series <- window(series, start(series), c(year, month), extend=TRUE)
    }
    print(periods)
    print(value)
    series <- replace (series,periods,value)
  }else{
    print("period före startperiod")
  }  
}

这是一个例子:

year <- 2015
month <- 3


temp <- c(1:98)
q1 <- ts(temp,start=c(2009,1),frequency = 12)
temp <- c(1:122)
q2 <- ts(temp,start=c(2007,1),frequency = 12)
temp <- c(1:136)
q3 <- ts(temp,start=c(2005,11),frequency = 12)
q1 <- tsenter (series = q1,year = year,month = month,value = 100)
q2 <- tsenter (series = q2,year = year,month = month,value = 99)
q3 <- tsenter (series = q3,year = year,month = month,value = 27)


print(q1)
print(q2)
print(q3)