如何将列名称转换为R中的时间序列名称?

时间:2015-04-23 22:18:52

标签: r time-series

人。我是R的新手,我正在尝试做一些看起来很简单的事情,虽然我找不到一个好的答案来解决它!

我从Excel导入数据(是的,我知道,但在工作中一切都在Excel中)。

x <- read.table(file = "clipboard", sep = "\t", header=TRUE)

我的数据是这样的:

               CPI           CoreCPI
1              2.3             3.5
2              2.4             3.5
3              2.3             3.3
4              2.6             3.7
5              2.5             3.7

然后,我试图将每列转换为不同的时间序列:

for (i in 1:ncol(x) {
    CPI<-ts(x[,1],start=c(2014,11),end=c(2015,3),frequency=12)
    CoreCPI<-ts(x[,2],start=c(2014,11),end=c(2015,3),frequency=12)
}

但我必须重写所有名字!难道不存在R可以保留colnames(x)向量作为每个时间序列的名称吗?

我试过

colnames(x)[,i]<-ts(x[,i],start=c(2014,11),end=c(2015,3),frequency=12)

但我收到错误消息:

Error in paste("serie", i, "sep= ") <- ts(x[, 1], start = c(2014, 11),  : 
  target of assignment expands to non-language object

帮助!

非常感谢!

1 个答案:

答案 0 :(得分:0)

1) lapply使用ts,如下所示:

L <- lapply(x, ts, start = c(2014, 11), frequency = 12)

提供指定时间序列的列表:

> L
$CPI
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014                                         2.3 2.4
2015 2.3 2.6 2.5                                    

$CoreCPI
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014                                         3.5 3.5
2015 3.3 3.7 3.7   

2)可以附加列表L,如下所示,但通常最好使用L$CPIL$CoreCPI来引用该系列。< / p>

> attach(L) # creates objects CPI and CoreCPI
> CPI
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014                                         2.3 2.4
2015 2.3 2.6 2.5   

3)另请注意,可以创建一个多变量时间序列,就像这样:

 x_ts <- ts(x, start = c(2014, 11), frequency = 12)

,并提供:

 > x_ts
         CPI CoreCPI
Nov 2014 2.3     3.5
Dec 2014 2.4     3.5
Jan 2015 2.3     3.3
Feb 2015 2.6     3.7
Mar 2015 2.5     3.7

> x_ts[, "CPI"]
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2014                                         2.3 2.4
2015 2.3 2.6 2.5