我有一个由6列组成的文本文件,如下所示。测量每30分钟进行几年(2001-2013)。我想计算每日平均值,例如:对于2001年,所有值都对应于第一天(1)并计算平均值,并对该年份的所有日期以及文本文件中可用的所有年份执行此操作。
阅读文件:
LR=read.table("C:\\Users\\dat.txt", sep ='', header =TRUE)
头:
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
答案 0 :(得分:4)
尝试:
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)
如果您想选择特定的年份范围,请使用子集:
dat < ddply(LR, .(Year, day), summarize, val = mean(valu1))
subset(dat, Year > 2003 & Year < 2005)
答案 1 :(得分:2)
您可以尝试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)