【问题标题】:How to compute the daily average from hourly values?如何根据每小时值计算每日平均值?
【发布时间】:2015-01-30 14:45:37
【问题描述】:

我有一个包含 6 列的文本文件,如下所示。几年(2001-2013 年)每 30 分钟测量一次。我想计算每日平均值,例如:对于 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

【问题讨论】:

  • 你可以使用dplyr; LR %>% group_by(Year, day) %>% summarise_each(funs(mean), starts_with('valu'))aggregate(.~Year+day, LR[-c(3:4)], mean)

标签: r text-files


【解决方案1】:

试试:

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)

【讨论】:

  • 很高兴为您提供帮助!我刚刚把它放在答案框中。
【解决方案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)

【讨论】:

  • 或公式接口:aggregate(cbind(valu1, valu2) ~ Year + day, LR, mean)
  • ...这对于那些理解它的人来说更干净。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2021-12-18
  • 2017-12-23
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多