汇总每月的时间序列总和

时间:2017-12-01 09:24:07

标签: r time-series aggregate strptime

我的数据框有23列,第一列属于日期和时间。

>str(combined)

'data.frame':   100082 obs. of  23 variables:

$ date: POSIXlt, format: "2004-01-01 01:00:00" "2004-01-01 03:00:00" "2004-01-01 04:00:00" "2004-01-01 05:00:00" ...
 $ t1  : num  665 556 714 890 878 ...
 $ t2  : num  2374 2238 2336 2358 2331 ...
 $ t3  : num  2302 2091 2238 2272 2218 ...
 $ t4  : num  2400 2400 2400 2400 2400 2400 2400 2400 2400 2400 ...
 $ t5  : num  2400 2400 2400 2400 2400 2400 2400 2400 2400 2400 ...
 $ t6  : num  2400 2400 2400 2400 2400 ...
 $ t7  : num  2400 2400 2400 2400 2400 ...
 $ t8  : num  2400 2400 2400 2400 2400 ...
 $ t9  : num  2111 1843 1916 1920 1907 ...
 $ t10 : num  1834 1645 1762 1777 1751 ...
 $ t11 : num  1608 1518 1662 1687 1652 ...
 $ t12 : num  626 529 675 842 834 ...
 $ t13 : num  1766 1706 1866 1888 1852 ...
 $ t14 : num  1957 1792 1907 1916 1893 ...
 $ t15 : num  2034 1938 2068 2085 2059 ...
 $ t16 : num  497 417 538 675 668 ...
 $ t17 : num  445 364 473 591 579 ...
 $ t18 : num  376 268 358 435 417 ...
 $ t19 : num  597 473 608 709 658 ...
 $ t20 : num  638 500 641 742 676 ...
 $ t21 : num  2387 2263 2345 2371 2350 ...
 $ t22 : num  2390 2291 2363 2385 2362 ...

日期将持续到2017年 - 08月31日23:00:00。我只想总结不同年份的所有月份值。为了做到这一点,下面的代码已应用于我的"组合"数据帧;

bymonth=aggregate(cbind(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22)~month(date),data=combined,FUN=sum)

这导致了相同月份的所有值的总和。

> str(bymonth)
'data.frame':   12 obs. of  23 variables:
 $ month(date): num  1 2 3 4 5 6 7 8 9 10 ...
 $ t1         : num  9079539 8260669 10758842 9457569 9082702 ...
 $ t2         : num  8865401 8725852 10463748 9015349 9139077 ...
 $ t3         : num  8944534 8678897 10456126 8963046 8934908 ...
 $ t4         : num  9031512 8627635 10952759 9509983 9691009 ...
 $ t5         : num  9056095 8667163 10896578 9425384 9630523 ...
 $ t6         : num  7449536 6982570 8920602 6950115 5987614 ...
 $ t7         : num  7610326 7187122 9266084 7310302 6412976 ...
 $ t8         : num  7987144 7548964 9684426 7710839 6874969 ...
 $ t9         : num  7644122 6585329 8470816 6304882 5317381 ...
 $ t10        : num  7917904 6765170 8638459 6387506 5441643 ...
 $ t11        : num  8237490 7041719 8923193 6646191 5780772 ...
 $ t12        : num  8976847 8223188 10536015 9210887 8794828 ...
 $ t13        : num  8641208 7507814 9533105 7265526 6487144 ...
 $ t14        : num  8663482 7585256 9612939 7396403 6638494 ...
 $ t15        : num  8544334 7530451 9360095 7138325 6268128 ...
 $ t16        : num  8403307 7463580 9858757 8529255 8021458 ...
 $ t17        : num  7954798 7031909 9373369 8100460 7541611 ...
 $ t18        : num  7867333 6943056 9263699 8048171 7446287 ...
 $ t19        : num  8104703 7384206 9630303 8274850 7682145 ...
 $ t20        : num  8593316 7738650 9966859 8511077 7955871 ...
 $ t21        : num  8881166 8678495 10571128 9133670 9158251 ...
 $ t22        : num  8828751 8733658 10495228 9058206 9214007 ...

但;我只想把每年每个月的总和分组。例如;所有月份总和为2005年,2006年,2007年......

在对不同年份的所有相同月份进行总结之后,我想对不同年份的所有这些月份进行平均。因此,我终于希望获得月度平均结果。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。使用.~month+year是解决方案。整个命令可以在下面找到;

months=aggregate(cbind(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22)~year(date)+month(date), FUN=sum, na.rm=TRUE, data=combined)

您是否知道更有效的方法,而不是像上面那样逐一编写所有变量?