我为瑞典同质化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中编号的地方,而不是基于月份而不是添加新的时段。
答案 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)