r - 如何在 R 中使用“for”循环来创建不同的时间序列
问题描述
我是 R 新手,我正在尝试解决以下问题:我需要为 40 个不同的城市创建 40 个不同的季节性调整时间序列。适用于一个时间序列的代码如下所示(在本例中为斯德哥尔摩)
stockholmtsdecomp = stl(stockholmts[,5], window="periodic")
des_stockholmts <- seasadj(stockholmtsdecomp) #
时间序列斯德哥尔摩已经存在的地方(以及其他 39 个城市)
如何迭代城市?解决它的一种方法是为每个城市重写 40 次。我想循环执行以节省时间。我想到的是(这里只有 3 个城市)
lanlist=list('stockholm', 'oslo', 'madrid')
for (i in lanlist)
{
x=(paste(i,'ts', sep=""))
y=(paste(i,'tsdecomp', sep=""))
z=(paste('des_',i,'ts', sep=""))
y = stl(x[,5], window="periodic")
z <- seasadj(y)
}
这显然是行不通的。任何巧妙的解决方案?
谢谢!
解决方案
您可以使用函数as.symbol()
并eval()
检索您在循环中构建的变量名称作为语言符号,并在它们用作输入时评估它们(例如x
在您的代码中)。
您可以使用函数assign()
创建一个变量,当它们用作输出时(例如y
,z
在您的代码中),其名称由变量给出。
这是一个概念证明示例,它显示了如何使用您的变量x
以及z
对应于两个城市的两个时间序列来工作:
oslots = c(3.5, 2.1, 1.7)
madridts = c(1.9, 2.8, 3.1)
lanlist=list('oslo', 'madrid')
for (i in lanlist)
{
x = paste(i, 'ts', sep="")
cat("Processing time series '", x, "'...\n", sep="")
z = paste('des_', i, 'ts', sep="")
assign(z, eval(as.symbol(x))[1])
cat("The first value of time series '", x, "' is: ", eval(as.symbol(z)), "\n", sep="")
cat("\n")
}
它应该输出以下内容:
Processing time series 'oslots'...
The first value of time series 'oslots' is: 3.5
Processing time series 'madridts'...
The first value of time series 'madridts' is: 1.9
我相信您将能够将这些概念应用到执行时间序列的季节性和趋势分解的代码中。
推荐阅读
- php - 如何根据 2 个不同的 id 对数组元素进行排序或分组
- sql - 如何计算增长率?
- c# - 向 Automapper ForMember 添加额外参数的简单方法
- php - 在插入有效的文件扩展名之前不允许提交表单
- vue.js - 为 vue 路由器中的每个路由添加语言前缀
- javascript - 当我尝试推送到 heroku 时,我的 Django 项目出现问题,出现问题
- javascript - Discord.js 智能帮助嵌入
- reactjs - 尝试测试单独文件时 React 中的酶 - 类型错误:无法读取未定义的属性“查找”
- python-3.x - 为什么将一个文件从一个 S3 存储桶复制到另一个存储桶时,boto3 会静默失败?
- pine-script - 关于交易视图 内置指标 自定义筛选器