我对aggregate()
函数功能有一个疑问。让我们看下面的代码:
set.seed(20)
date<-(seq(as.Date('2000-01-01'),as.Date('2020-04-01'),by = '1 month'))
x<-rnorm(244)
df1<-data.frame(date,x)
df2 <- aggregate(x~quarter + year, transform(df1,
quarter = quarters(date), year = as.integer(format(date, '%Y'))), mean)
df2[order(df2$year), ]
相对于平均值,它将每月数据转换为每季度数据。我也不能取平均值,而是某个季度第一个月的值。我只需要将“平均”更改为“第一”即可。类似地,我可以将“均值”更改为“最后”来占用季度的第三个月。但是我不知道该如何度过第二个月。将“平均”更改为“第二”无效。
总结:
我可以轻松地将“均值”更改为季度的第一个月或第三个月:
quarter = quarters(date), year = as.integer(format(date, '%Y'))), first)
quarter = quarters(date), year = as.integer(format(date, '%Y'))), last)
但是有什么办法可以暗示我要进入季度的第二个月吗?
答案 0 :(得分:1)
您可以编写匿名function()
。 mean(x)
给出子集值的平均值,x[2]
给出第二个值。
df2 <- aggregate(x ~ quarter + year, transform(df1,
quarter=quarters(date), year=as.integer(format(date, '%Y'))),
function(x) x[2])
结果:
df2[order(df2$year), ]
# quarter year x
# 1 Q1 2000 -0.58592447
# 2 Q2 2000 -0.44656677
# 3 Q3 2000 -0.86901834
# 4 Q4 2000 -0.02013537
# 5 Q1 2001 1.32322085
# 6 Q2 2001 0.97057758
# 7 Q3 2001 0.38921440
# 8 Q4 2001 0.72222970
# 9 Q1 2002 -1.47206332
# 10 Q2 2002 -2.47463643
# 11 Q3 2002 1.59014577
# 12 Q4 2002 -1.09734184
# 13 Q1 2003 1.24556891
# 14 Q2 2003 -0.81848302
# 15 Q3 2003 -0.36902897
# 16 Q4 2003 0.88187751
# 17 Q1 2004 -0.38130918
# 18 Q2 2004 0.19033942
# 19 Q3 2004 0.05620190
# 20 Q4 2004 -0.81825711
# 21 Q1 2005 -0.06943659
# 22 Q2 2005 1.19633067
# 23 Q3 2005 -1.06966198
# 24 Q4 2005 0.65542996
# 25 Q1 2006 -0.68322354
# 26 Q2 2006 -0.15076679
# 27 Q3 2006 -0.02958576
# 28 Q4 2006 0.09713576
# 29 Q1 2007 -0.63777542
# 30 Q2 2007 1.21094080
# 31 Q3 2007 -1.96802578
# 32 Q4 2007 -0.06777808
# 33 Q1 2008 1.10106166
# 34 Q2 2008 0.54804306
# 35 Q3 2008 0.70092043
# 36 Q4 2008 -0.10999239
# 37 Q1 2009 -1.51505324
# 38 Q2 2009 -0.95063164
# 39 Q3 2009 -0.93091312
# 40 Q4 2009 -0.07976572
# 41 Q1 2010 0.27763886
# 42 Q2 2010 0.81182877
# 43 Q3 2010 -1.78886877
# 44 Q4 2010 -1.09774144
# 45 Q1 2011 1.66913740
# 46 Q2 2011 -0.66573063
# 47 Q3 2011 0.92690149
# 48 Q4 2011 0.29031144
# 49 Q1 2012 0.08276795
# 50 Q2 2012 -0.47659808
# 51 Q3 2012 -0.85723953
# 52 Q4 2012 1.15483093
# 53 Q1 2013 -0.14563202
# 54 Q2 2013 1.03708875
# 55 Q3 2013 0.33410243
# 56 Q4 2013 -0.35670625
# 57 Q1 2014 0.32509028
# 58 Q2 2014 0.58925249
# 59 Q3 2014 -1.38040139
# 60 Q4 2014 1.34646214
# 61 Q1 2015 0.43327790
# 62 Q2 2015 1.11073002
# 63 Q3 2015 0.29225471
# 64 Q4 2015 0.67960387
# 65 Q1 2016 -1.14082103
# 66 Q2 2016 0.21677192
# 67 Q3 2016 1.03197341
# 68 Q4 2016 0.70875732
# 69 Q1 2017 -0.66832511
# 70 Q2 2017 0.48740584
# 71 Q3 2017 -1.01494026
# 72 Q4 2017 -1.21028886
# 73 Q1 2018 -0.46631706
# 74 Q2 2018 -0.62211421
# 75 Q3 2018 -0.64374836
# 76 Q4 2018 -1.79654504
# 77 Q1 2019 -0.57687158
# 78 Q2 2019 0.26390029
# 79 Q3 2019 2.93209205
# 80 Q4 2019 -1.05687526
# 81 Q1 2020 -0.90212039
# 82 Q2 2020 NA