因为你没有提供代码来表达你的数据,所以我假定 mydf 是你的数据:
mydf <- data.frame(date = seq(Sys.Date(), by='day', length=365),
a = runif(365), b=rnorm(365))
先生成一列月份:
mydf$month <- format(mydf$date, '%Y-%m')
然后有多个方案来计算。
mym1 <- data.frame(a = tapply(mydf$a, mydf$month, mean),
b = tapply(mydf$b, mydf$month, mean))
- 方案 2:用 beginr 包的 tapplydf(),其实就是对方案 1 的代码进行了简化
library(beginr)
mym2 <- tapplydf(mydf, c('a', 'b'), 'month', mean)
- 方案 3:用 zoo 包的 aggregate() 函数。
library(zoo)
z <- zoo(mydf[, c('a', 'b')], mydf$date)
mym3 <- aggregate(z, by = mydf$month, FUN = mean)