【问题标题】:Create ts variables from matrix, given list of variable names给定变量名称列表,从矩阵创建 ts 变量
【发布时间】:2013-06-27 11:58:42
【问题描述】:

我有一个来自 FRED 数据的 265x7 矩阵,称为 data,并使用 varlist = names(data)[2:7] 从标头创建了一个变量名称列表

我想做的是从data 中提取列2:7 并将它们放入ts 对象中,每个对象都由存储在varlist 中的相应名称命名。我对 R 比较陌生。到目前为止,我管理的是使用

创建数字变量
lapply(varlist,function(x){assign(x,data[,x],envir = .GlobalEnv)})

不过,我想要实现的是创建具有 start = c(1947,1), frequency = 4 属性的 ts 对象

如果可能的话,我如何将它实现到上述函数中?

【问题讨论】:

    标签: r variables matrix time-series


    【解决方案1】:

    这里不需要lapplyts 构造函数接受 matrixdata.frame (mts)

    set.seed(42)
    fred_mat <- matrix(rnorm(265 * 7), ncol = 7,
                       dimnames = list(NULL, LETTERS[1:7]))
    
    varlist <- colnames(fred_dat)[2:7]
    
    fred_ts <- ts(fred_mat[, varlist], frequency = 4, start = c(1947, 1))
    
    str(fred_ts)
     ## mts [1:265, 1:6] 1.065 0.813 -0.191 -2.7 0.061 ...
     ## - attr(*, "dimnames")=List of 2
     ##  ..$ : NULL
     ##  ..$ : chr [1:6] "B" "C" "D" "E" ...
     ## - attr(*, "tsp")= num [1:3] 1947 2013 4
     ## - attr(*, "class")= chr [1:3] "mts" "ts" "matrix"
    

    【讨论】:

      【解决方案2】:

      您可以创建一个ts 给出一个矩阵。并且无需手动设置名称,它会选择矩阵名称并将它们用作时间序列名称。

           ts(data[2:7], start = c(1947, 1), frequency = 4)
      

      这里举个例子,我给ts一个命名矩阵:

         ts(matrix(rnorm(3*5), nrow=3, ncol=5,
                 dimnames=list(NULL,paste0('var',1:5))), 
                 start = c(1947, 1), frequency = 4)
                   var1        var2       var3       var4       var5
      1947 Q1 1.3972600 -1.29789587 -0.4044754  1.8445556 -0.6240791
      1947 Q2 0.8193313 -0.45867923 -0.3486047 -0.4864113  1.2318401
      1947 Q3 0.5614728 -0.07158473 -1.0102497  1.5096153  0.4490764
      

      【讨论】:

      • 我们同时回答很有趣:)
      • 这太棒了!我的lapply 命令实际上适用于您创建的mts,所以如果需要我也可以拆分它。谢谢!
      猜你喜欢
      • 2012-07-10
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多