【问题标题】:How to use a "for" loop in R to create different time series如何在 R 中使用“for”循环来创建不同的时间序列
【发布时间】:2020-06-29 11:14:54
【问题描述】:

我是 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)
}

这显然行不通。任何巧妙的解决方案?

谢谢!

【问题讨论】:

  • 非常直观的答案,谢谢!

标签: r loops for-loop time-series


【解决方案1】:

您可以使用函数 as.symbol()eval() 来检索您在循环中构建的变量名称作为语言符号,并在将它们用作输入时评估它们(例如,x in你的代码)。

您可以使用函数assign() 创建一个变量,其名称由变量给出当它们用作输出时(例如,您的代码中的yz)。 p>

这是一个概念验证示例,展示了如何在对应于两个城市的两个时间序列上使用变量 xz

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

我相信您能够将这些概念应用到执行时间序列的季节性和趋势分解的代码中。

【讨论】:

  • 作为一名新的贡献者,如果您认为收到的答案对您的问题有帮助或解决了您的问题,我恳请您指出该怎么做:stackoverflow.com/help/someone-answers 遵循这些准则有助于社区.谢谢! :)
猜你喜欢
  • 2021-12-21
  • 2021-06-29
  • 2015-04-24
  • 1970-01-01
  • 2013-09-23
  • 2018-12-22
  • 1970-01-01
  • 2022-01-11
  • 2014-03-31
相关资源
最近更新 更多