r - 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
解决方案
在这种情况下,这是可能的,因为您基本上是将相同的值 (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
推荐阅读
- java - 在一天中的固定时间后不会取消选中 SwitchCompat
- angular - 组件不加载 ng 属性 ionic
- android - 如何测量手机与被摄物体之间的距离?
- google-cloud-platform - 在 Google Cloud DataProc 上安排 cron 作业
- jquery - 如何在 jQuery 中从 JSON 文件中读取单个数据?
- php - Laravel 自定义控制器出现 404 错误
- ios - 如何确认来自 Firestore 的数据被快速附加?
- excel - 如何在excel中使用vba关闭特定名称的pdf文档
- angular - RxJs 订阅者不会在商店更改后立即更新
- linux - 如何启用/禁用/编辑 Alsa Audio 的 32 个通道?