我找到了我认为自己写过的答案,但实际上有点不同
# this should "shift" the year calculation 3 months and provide quarter
c('Q1','Q2','Q3','Q4')[ 1+((as.POSIXlt(dates)$mon+3) %/% 3)%%4]
然后粘贴 FY,季度移了 6 个月,但您可能需要进行调整,因为您的年份规范对于“命名年份”不明确:
dat$FY_Q <- paste( 1900+as.POSIXlt( dat$dates )$year+
1*(as.POSIXlt( dat$dates )$mon %in% 7:12) ,
c('Q1','Q2','Q3','Q4')[ 1+((as.POSIXlt(dat$dates)$mon-6) %/% 3)%%4]
, sep="-")
dat
Date Country Class Value dates FY_Q
1 6/1/2010 USA A 45 2010-06-01 2010-Q4
2 6/1/2010 Canada A 23 2010-06-01 2010-Q4
3 6/1/2010 Brazil B 65 2010-06-01 2010-Q4
4 9/1/2010 USA B 47 2010-09-01 2011-Q1
5 9/1/2010 Canada A 98 2010-09-01 2011-Q1
6 9/1/2010 Brazil B 25 2010-09-01 2011-Q1
snipped---------
现在按 FY_Q 和 Country 进行 tapply 或聚合:
> with( dat, aggregate(Value, list(FY_Q, Country),FUN=mean) )
Group.1 Group.2 x
1 2010-Q4 Brazil 65
2 2011-Q1 Brazil 25
3 2011-Q2 Brazil 23
4 2011-Q3 Brazil 43
5 2011-Q4 Brazil 65
6 2012-Q1 Brazil 25
7 2012-Q2 Brazil 23
8 2012-Q3 Brazil 43
9 2010-Q4 Canada 23
10 2011-Q1 Canada 98
11 2011-Q2 Canada 79
12 2011-Q3 Canada 77
13 2011-Q4 Canada 23
14 2012-Q1 Canada 98
15 2012-Q2 Canada 79
16 2012-Q3 Canada 77
17 2010-Q4 USA 45
18 2011-Q1 USA 47
19 2011-Q2 USA 14
20 2011-Q3 USA 84
21 2011-Q4 USA 45
22 2012-Q1 USA 47
23 2012-Q2 USA 14
24 2012-Q3 USA 84
See: 在 R 中将日期时间格式化为季节? https://stackoverflow.com/questions/24946955/format-date-time-as-seasons-in-r有点类似的问题和解决方案。