在 R 中绘制带有动物园的每月时间序列

Plot monthly time series with zoo in R

我将每天的时间序列读入 zoo,然后按月汇总时间序列以计算平均值:

# ts is the original daily time series
# ts is a zoo 
m = aggregate(ts, by=months, mean)

聚合日期 m 看起来像(值是捏造的):

April  August  December  February  January  July  
40      80       120     20        10       70  

June  March  May  November  October  September    
60    30     50   110       100      90


# Check the class of index
> class(index(m))
[1] "character"

# Subsetting manually
> m[c('January', 'December']
[1] December  January 
    120       10

很明显,m的索引内部是按字符排序的,导致折线图难以阅读。

如何按月对聚合时间序列m进行排序?

假设输入显示:

library(zoo)
ts <- zoo(1:12, as.Date(as.yearmon(2000) + 0:11/12))

aggregate(ts, by = match(months(index(ts)), month.name), mean)

请注意 month.name 内置于 R 中。

请确保您的问题是可重现的。题中输入缺失

G. Grothendleck 的想法的另一个选择是

聚合(x, by = gsub("\d\d\d\d-(\d\d)-\d\d", "\1", as.character(索引(x) )), 均值)

当我尝试G.Grothendleck的原始代码时出现错误,但也许我在创建测试数据时做错了

library(quantmod)
getQuote("APPL")
x <- as.zoo(x)
aggregate(x, by = match(months, month.name), mean)

出品:

# Error in match(months, month.name) : 'match' requires vector arguments

但这奏效了

aggregate(x, by = gsub("\d\d\d\d-(\d\d)-\d\d", "\1", as.character(index(x))), mean)