我有一个数据框,其中一列是长列表日期,另一列则是数值。它的样子如下:
set.seed(1234)
df <- data.frame(date= as.Date(c('2010-09-05', '2011-09-06', '2010-09-13',
'2011-09-14', '2010-09-23', '2011-09-24',
'2010-10-05', '2011-10-06', '2010-10-13',
'2011-10-14', '2010-10-23', '2011-10-24')),
value= rnorm(12))
我需要计算每个月的每个10天期间的平均值,但与年份无关,就像这样:
dfNeeded <- data.frame(datePeriod=c('period.Sept0.10', 'period.Sept11.20', 'period.Sept21.30',
'period.Oct0.10', 'period.Oct11.20', 'period.Oct21.31'),
meanValue=c(mean(df$value[c(1,2)]),
mean(df$value[c(3,4)]),
mean(df$value[c(5,6)]),
mean(df$value[c(7,8)]),
mean(df$value[c(9,10)]),
mean(df$value[c(11,12)])))
有没有更快的方法做到这一点?
month(.)
函数,如:month(df$date, label = TRUE)
可以更接近 OP 的“精确”答案。cut
是一个非常方便的函数! - Arunplyr
函数中,因此我选择了这段代码:df$period <- paste(month(df$date,label=T),cut(day(df$date),breaks=c(0,10,20,31)),sep="-") library(plyr) ddply(df, .(period), summarise, meanValue=mean(value))
- luciano