计算季度平均值dataframe

时间:2015-10-14 21:53:42

标签: r dataframe

我有这个数据框,(df1):

           Month  index
1   2015-09-01   1.21418847
2   2015-08-01  -4.37919039
3   2015-07-01  -1.16004624
4   2015-06-01  -1.09754890
5   2015-05-01  -4.37919039
6   2015-04-01  -4.37919039
7   2015-03-01   4.37919039
8   2015-02-01   4.37919039
9   2015-01-01  -0.11285150
10  2014-12-01   0.45712044
11  2014-11-01   0.97597018
12  2014-10-01   0.87560496
13  2014-09-01   0.66278156
14  2014-08-01   4.37919039
15  2014-07-01   1.15440685
16  2014-06-01   1.38021497
17  2014-05-01   1.67663242
18  2014-04-01   2.08358406
19  2014-03-01   2.50222843
20  2014-02-01   2.71665822
21  2014-01-01   3.13692051
22  2013-12-01   2.91702023
23  2013-11-01   3.02603774
24  2013-10-01   2.55812363
25  2013-09-01   3.12586325
26  2013-08-01   3.26063617
27  2013-07-01   2.91702023
28  2013-06-01   3.15504505
29  2013-05-01   2.53958494
30  2013-04-01   2.61528861
31  2013-03-01   2.84742861
32  2013-02-01   2.82097624
33  2013-01-01   2.53196473
34  2012-12-01   2.35786991
35  2012-11-01   2.40611260
36  2012-10-01   2.42408844
37  2012-09-01   2.91702023
38  2012-08-01   2.33372249
39  2012-07-01   2.00140636
40  2012-06-01   2.24721387
41  2012-05-01   1.89189602
42  2012-04-01   1.98807663
43  2012-03-01   1.89563925
44  2012-02-01   1.19541625
45  2012-01-01   2.91702023
46  2011-12-01   0.29072412
47  2011-11-01  -2.91702023
48  2011-10-01  -2.91702023
49  2011-09-01  -0.36402331
50  2011-08-01  -0.55409805
51  2011-07-01  -0.05902839
52  2011-06-01  -0.03946940
53  2011-05-01   0.30898661
54  2011-04-01   2.91702023
55  2011-03-01   0.80556310
56  2011-02-01   1.07001901
57  2011-01-01   2.91702023
58  2010-12-01   1.34682208
59  2010-11-01   1.30446466
60  2010-10-01   0.97753435
61  2010-09-01   0.90434619
62  2010-08-01   0.80415571
63  2010-07-01   1.41129808
64  2010-06-01   2.03576435
65  2010-05-01   2.85757135
66  2010-04-01   2.91702023
67  2010-03-01   3.96563441
68  2010-02-01   4.37919039
69  2010-01-01   4.57358010
70  2009-12-01   4.63589893
71  2009-11-01   4.40042885
72  2009-10-01   4.21359930
73  2009-09-01   4.10739350
74  2009-08-01   2.91702023
75  2009-07-01   3.85460338
76  2009-06-01   3.07796824
77  2009-05-01   2.91702023
78  2009-04-01   1.90359672
79  2009-03-01   0.68355248
80  2009-02-01   0.36218125
81  2009-01-01  -0.50814101
82  2008-12-01   0.49310633
83  2008-11-01   2.98877210
84  2008-10-01   2.28716199
85  2008-09-01   0.61433048
86  2008-08-01   0.51258623
87  2008-07-01   1.74079440
88  2008-06-01   2.91702023
89  2008-05-01   1.60899848
90  2008-04-01   2.01574569
91  2008-03-01   1.81341196
92  2008-02-01   1.48482933
93  2008-01-01   1.89122725
94  2007-12-01   1.84400308
95  2007-11-01   1.23545695
96  2007-10-01   0.44341718
97  2007-09-01   0.55630846
98  2007-08-01   0.42806839
99  2007-07-01  -0.75234218
100 2007-06-01  -1.44397151
101 2007-05-01  -2.10673018
102 2007-04-01  -1.40817350
103 2007-03-01  -0.73608848
104 2007-02-01  -0.69200513
105 2007-01-01  -0.51056142
106 2006-12-01  -0.40504212
107 2006-11-01  -0.04161989
108 2006-10-01  -0.10478629
109 2006-09-01   0.07423530
110 2006-08-01   0.13076121
111 2006-07-01   2.91702023
112 2006-06-01   1.02865488
113 2006-05-01  -0.08979180
114 2006-04-01  -1.52792341
115 2006-03-01  -2.52839603
116 2006-02-01  -3.39026284
117 2006-01-01  -3.04045769

我想计算每年的季度平均值。这将导致data.frame有39行。

我执行此代码来实现季度平均值:

final<-df1[, mean(index), by = quarterly(Month)]

错误mssg是:

Error in `[.data.frame`(df1, , mean(index),  : 
  unused argument (by = month(Month))

信息:

class(df1$index)
"numeric"
class(df1$Month)
"factor"

我做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

您似乎正在尝试在数据框上使用 data.table 语法。所以先做

library(data.table)
setDT(df1)

加载 data.table 包并将df1设置为数据表。然后就可以了

final <- df1[, mean(index), keyby = .(year(Month), quarter(Month))]
str(final)
# Classes ‘data.table’ and 'data.frame':    39 obs. of  3 variables:
#  $ year   : int  2006 2006 2006 2006 2007 2007 2007 2007 2008 2008 ...
#  $ quarter: int  1 2 3 4 1 2 3 4 1 2 ...
#  $ V1     : num  -2.986 -0.196 1.041 -0.184 -0.646 ...
#  - attr(*, "sorted")= chr  "year" "quarter"
#  - attr(*, ".internal.selfref")=<externalptr> 

这表明我们在结果中有39行,如您所愿。一些注意事项:该函数名为quarter()而非quarterly(),您需要M中的资金Month,并且需要按年份和季度进行分组。