首页 > 解决方案 > R xts 时间序列递归扩展

问题描述

我有一个XTS时间序列,我想根据之前的值计算未来值(2018-04-01 起)x[t]=x[t-1]*1.01。是否可以不必做循环?

            FRA.GDPV.Q

2017-01-01 2.217110e+12
2017-04-01 2.232964e+12
2017-07-01 2.247932e+12
2017-10-01 2.263204e+12
2018-01-01 2.272640e+12
2018-04-01           NA
2018-07-01           NA
2018-10-01           NA
2019-01-01           NA

标签: rdatetime-series

解决方案


在这种情况下,这是可能的,因为您基本上是将相同的值 (last_value) 乘以 1.01^1, 1.01^2, ...

mydata <- rnorm(10)  # sample data
last_value <- mydata[length(mydata)]  # last value

N=4  # will add 4 more values
fv_factors <- 1.01^(1:N)

new_values <- last_value*fv_factors  # computes new values
mydata <- c(mydata,extended_values)  # adds new values to mydata

# Comparing with loop
new_values2 <- c(last_value,numeric(4))  # Same as above
for (i in 2:(N+1)) {
  new_values2[i] <- new_values2[i-1]*1.01
}

round(new_values,4)==round(new_values2[-1],4)  # Same result

舍入不是必需的,这两种方法都会得到相同的值。

> round(new_values,4)==round(new_values2[-1],4)
[1] TRUE TRUE TRUE TRUE

推荐阅读