在给定变量名称列表的情况下,从矩阵创建ts变量

时间:2013-06-27 11:58:42

标签: r variables matrix time-series

我有来自FRED数据的265x7矩阵,称为data,并使用varlist = names(data)[2:7]

从标题中创建了变量名称列表

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

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

但我想要实现的是创建具有属性ts的{​​{1}}个对象

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

2 个答案:

答案 0 :(得分:2)

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

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

这里有一个例子,我给出了一个命名矩阵:

   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

答案 1 :(得分:2)

这里不需要lapplyts构造函数接受matrixdata.framemts

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"