如何根据每小时值计算每日平均值?

How to compute the daily average from hourly values?

我有一个包含 6 列的文本文件,如下所示。几年(2001-2013 年)每 30 分钟进行一次测量。我想计算每日平均值,例如:对于 2001 年,取所有对应于第一天 (1) 的值并计算平均值,并对那一年的所有日期以及文本文件中可用的所有年份执行此操作。

读取文件:

LR=read.table("C:\Users\dat.txt", sep ='', header =TRUE)

header:

head(LR)
   Year day hour mint valu1 valu2
1 2001   1    5   30     0     0
2 2001   1    6    0     1     0
3 2001   1    6   30     2     0
4 2001   1    7    0     0     7
5 2001   1    7   30     5     8
6 2001   1    8    0     0     0

尝试:

library(plyr)
ddply(LR, .(Year, day), summarize, val = mean(valu1)) 

还有一个不太优雅的选项:

LR$n <- paste(LR$Year, LR$day, sep="-")
tapply(LR$valu1, LR$n, FUN=mean)

如果你想select一定范围的年份使用子集:

dat < ddply(LR, .(Year, day), summarize, val = mean(valu1)) 
subset(dat, Year > 2003 & Year < 2005)

你可以试试aggregate:

res <- aggregate(LR, by = list(paste0(dat$Year, dat$day)), FUN = mean)
## You can remove the extra columns if you want
res[, -c(1,4,5)]

或者如 Michael Lawrence 所建议的那样,使用公式界面:

aggregate(cbind(valu1, valu2) ~ Year + day, LR, mean)