Пакет lubridate
может быть полезен для вас.Я бы использовал функции year()
и month()
в сочетании с aggregate()
:
library(xts)
library(lubridate)
#set up some sample data
dates = seq(as.Date('2000/01/01'), as.Date('2005/01/01'), by="month")
df = data.frame(rand1 = runif(length(dates)), rand2 = runif(length(dates)))
my_xts = xts(df, dates)
#get the mean by year
aggregate(my_xts$rand1, by=year(index(my_xts)), FUN=mean)
Это выдает что-то вроде:
2000 0.5947939
2001 0.4968154
2002 0.4941752
2003 0.5291211
2004 0.6631564
Чтобы найти среднее значение для каждого месяца выможет сделать:
#get the mean by month
aggregate(my_xts$rand1, by=month(index(my_xts)), FUN=mean)
, который выдаст что-то вроде
1 0.5560279
2 0.6352220
3 0.3308571
4 0.6709439
5 0.6698147
6 0.7483192
7 0.5147294
8 0.3724472
9 0.3266859
10 0.5331233
11 0.5490693
12 0.4642588