2014-05-14 298 views
3

我感到有R做了一些时间序列的项目。我是初学者,需要你的帮助。 现在我有这样的一些月度数据:时间序列R,月度数据更改为季度

1/1/90 620 

2/1/90,591 

3/1/90,574 

4/1/90,542 

5/1/90,534 

6/1/90,545 

#...etc 

如果我使用TS()函数,很容易使数据转化为时间序列的结构,如:

  Jan Feb Mar ... Nov Dec 
    1990 620 591 574 ... 493 464 
    1991 100 200 300 ........... 

是否有任何可能改变它到季度重复这样的:

  1st 2nd 3rd 4th 
    1990-Q1 620 591 574 464 
    1990-Q2 100 200 300 400 
    1990-Q3 ... 
    1990-Q4 ... 
    1991-Q1 ... 

我试图改变

​​

ts(mydata,start=c(as.yearqrt("1990-1",1)),frequency=4) 

但似乎不工作。

任何人都可以帮助我吗?非常感谢你。

+2

季度数据将意味着你必须每季度一个数据点,但在你需要的输出,你似乎有4个数据每季度点数? –

+1

您是否需要**将每月数据汇总为季度数据? (即采取例如季度'mean') – Fernando

+0

感谢很多初学者,费尔南多和Rob ....我的想法是有点特别,我知道。我正在尝试你的想法,并非常感谢! – user2152814

回答

7
monthly <- ts(mydata,start=c(1990,1),frequency=12) 
quarterly <- aggregate(monthly, nfrequency=4) 
3

我不同意Hyndman这个。 Hyndman通常不会出错,这很罕见。但是,我可以告诉你他的解决方案不会给OP他想要的东西。

test<-c(1:100) 
test_ts <- ts(test, start=c(2000,1), frequency=12) 
test_ts 

    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
2000 1 2 3 4 5 6 7 8 9 10 11 12 
2001 13 14 15 16 17 18 19 20 21 22 23 24 
2002 25 26 27 28 29 30 31 32 33 34 35 36 
2003 37 38 39 40 41 42 43 44 45 46 47 48 
2004 49 50 51 52 53 54 55 56 57 58 59 60 
2005 61 62 63 64 65 66 67 68 69 70 71 72 
2006 73 74 75 76 77 78 79 80 81 82 83 84 
2007 85 86 87 88 89 90 91 92 93 94 95 96 
2008 97 98 99 100  

test_agg <- aggregate(test_ts, nfrequency=4) 
test_agg 

2000 6 15 24 33 
2001 42 51 60 69 
2002 78 87 96 105 
2003 114 123 132 141 
2004 150 159 168 177 
2005 186 195 204 213 
2006 222 231 240 249 
2007 258 267 276 285 
2008 294 

那么,等一下,第一季度不是3个月的平均值,它的总和。 (1 + 2 + 3 = 6,但你希望它显示均值= 2)。所以你需要修改一下。

test_agg <- aggregate(test_ts, nfrequency=4)/3 
# divisor is (old freq)/(new freq) = 12/4 = 3 
    Qtr1 Qtr2 Qtr3 Qtr4 
2000 2 5 8 11 
2001 14 17 20 23 
2002 26 29 32 35 
2003 38 41 44 47 
2004 50 53 56 59 
2005 62 65 68 71 
2006 74 77 80 83 
2007 86 89 92 95 
2008 98   

现在向您显示以季度形式写入的每月数据的平均值。 除数是这里的诀窍。如果你有每周(频率= 52)和季度(频率= 4),你会除以52/4 = 13。

+1

您可以使用'sum'设置'FUN ='意思是“'而不是'聚合',然后除以三。 – Barker

+0

2年后,我现在用的库(XLS)和'apply.quarterly(zoo_object,FUN =平均)'这是少了这么多头疼。 –

1

如果你想的意思,而不是总和,只需添加“表示”:

quarterly <- aggregate(monthly, nfrequency=4,mean)