【问题标题】:Daily Average of Time series derived from monthly data R monthdays()来自月度数据的时间序列的日平均值 R monthdays()
【发布时间】:2020-07-23 22:37:00
【问题描述】:

我有一个时间序列对象 ts。我在这里提到了整个对象。它有从 2013 年 1 月到 2017 年 12 月的所有年份的数据。我试图找到每日平均值,以便将该值除以一个月中的天数。

预期输出

ts 中 2013 年 1 月的第一个值为 23770,我希望该值为 23770/31,其中 31 是 1 月的天数,2013 年 2 月的第二个值为 23482。我希望该值为 23482/28因为 28 是 2013 年 2 月的天数,以此类推

目前尝试过:

我知道monthdays() 可以做到这一点。 ts/monthdays() .Monthdays() 之类的东西返回一个月的天数。我无法在这里实现它。在某处阅读有关此 tapply 的信息,但它并没有给我想要的结果,因为我需要对应于每个月年组合的值。

    ts
    Jan   Feb   Mar   Apr   May   Jun   Jul   Aug    Sep   Oct   Nov   Dec
2013 23770 23482 23601 22889 23401 24240 23873 23647  23378 23871 22624 23496
2014 26765 27619 26341 27320 27389 27418 26874 27005  27538 26324 27267 27583
2015 28354 27452 28336 28998 28595 28338 27806 28660  27226 28317 28666 28574
2016 30209 30659 31554 30248 30358 31091 30389 30247 31227 31839 30602 30609
2017 32180 32203 31639 31784 32375 30856 31863 32827 32506 31702 31681 32176

 > cycle(ts_actual_group2)
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013   1   2   3   4   5   6   7   8   9  10  11  12
2014   1   2   3   4   5   6   7   8   9  10  11  12
2015   1   2   3   4   5   6   7   8   9  10  11  12
2016   1   2   3   4   5   6   7   8   9  10  11  12
2017   1   2   3   4   5   6   7   8   9  10  11  12

自从我读了它就使用了tapply,但这并没有给出想要的输出

tapply(ts_actual_group2, cycle(ts_actual_group2), mean)
      1       2       3       4       5       6       7    8       9      10      11      12
28255.6 28283.0 28294.2 28247.8 28423.6 28388.6 28161.0 28477.2 28375.0 28410.6 28168.0 28487.6 

【问题讨论】:

  • 您可以使用dput 添加数据吗? dput(ts) ?
  • structure(c(23770L, 23482L, 23601L, 22889L, 23401L, 24240L, 23873L, 23647L, 23378L, 23871L, 22624L, 23496L, 26765L, 27619L, 26341L, 27320L, 27389L, 27418L, 26874L, 27005L, 27538L, 26324L, 27267L, 27583L, 28354L, 27452L, 28336L, 28998L, 28595L, 28338L, 27806L, 28660L, 27226L, 28317L, 28666L, 28574L, 30209L, 30659L, 31554L, 30248L, 30358L, 31091L, 30389L, 30247L, 31227L, 31839L, 30602L, 30609L, 32180L, 32203L, 31639L, 31784L, 32375L, 30856L, 31863L, 32827L, 32506L, 31702L, 31681L, 32176L), .Tsp = c(2013, 2017.91666666667, 12), class = "ts")
  • ts/monthdays(ts) 为我工作。

标签: r


【解决方案1】:

我无法在这里实现它。

我不知道你为什么不能。 forecast 包中的monthdays 函数在应用于ts 对象时,返回系列中每个月的天数。返回的对象是与输入相同维度的时间序列。所以你可以简单地划分它们。

library(forecast)

ts/monthdays(ts)

Jan       Feb       Mar       Apr       May       Jun       Jul 
2013  766.7742  838.6429  761.3226  762.9667  754.8710  808.0000
2014  863.3871  986.3929  849.7097  910.6667  883.5161  913.9333
2015  914.6452  980.4286  914.0645  966.6000  922.4194  944.6000
2016  974.4839 1057.2069 1017.8710 1008.2667  979.2903 1036.3667
2017 1038.0645 1150.1071 1020.6129 1059.4667 1044.3548 1028.5333

monthsdays(ts)  # Accepts a time-series object
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013  31  28  31  30  31  30  31  31  30  31  30  31
2014  31  28  31  30  31  30  31  31  30  31  30  31
2015  31  28  31  30  31  30  31  31  30  31  30  31
2016  31  29  31  30  31  30  31  31  30  31  30  31
2017  31  28  31  30  31  30  31  31  30  31  30  31

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多