如何根据每小时值计算每日平均值?
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)
我有一个包含 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)