我有来自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}}个对象
如果可能的话,我将如何将其实现到上述函数中?
答案 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)
这里不需要lapply
。 ts
构造函数接受matrix
和data.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"