如何计算大数据集的平均值

时间:2013-02-27 06:35:43

标签: r time-series average plyr

我正在处理一个温度读数的数据集,每小时一次,每天24小时,持续100多年。我希望每天获得平均温度以减小数据集的大小。标题看起来像这样:

     YR MO DA HR MN TEMP
  1943  6 19 10  0   73
  1943  6 19 11  0   72
  1943  6 19 12  0   76
  1943  6 19 13  0   78
  1943  6 19 14  0   81
  1943  6 19 15  0   85
  1943  6 19 16  0   85
  1943  6 19 17  0   86
  1943  6 19 18  0   86
  1943  6 19 19  0   87

等600,000多个数据点。

如何运行嵌套函数来计算日平均温度,以便保留YR,MO,DA,TEMP? 一旦我有了这个,我希望能够看到长期平均值&计算说明30年的1月份的平均温度。我该怎么做?

3 个答案:

答案 0 :(得分:10)

您可以在一步中执行此操作:

 meanTbl <- with(datfrm, tapply(TEMP, ISOdate(YR, MO, DA), mean) )

这为您提供了日期时间格式的索引以及值。如果您只想将日期作为字符而没有尾随时间:

meanTbl <- with(dat, tapply(TEMP, as.Date(ISOdate(YR, MO, DA)), mean) )

月平均值可以通过以下方式完成:

 monMeans <- with(meanTbl, tapply(TEMP, MO, mean))

答案 1 :(得分:6)

您可以使用aggregate

执行此操作
# daily means
aggregate(TEMP ~ YR + MO + DA, FUN=mean, data=data) 

# monthly means 
aggregate(TEMP ~ YR + MO, FUN=mean, data=data)

# yearly means
aggregate(TEMP ~ YR, FUN=mean, data=data)

# monthly means independent of year
aggregate(TEMP ~ MO, FUN=mean, data=data)

答案 2 :(得分:2)

使用plyr包可以实现您的第一个问题:

library(plyr)
daily_mean = ddply(df, .(YR, MO, DA), summarise, mean_temp = mean(TEMP))

与上述解决方案类似,每月获得意味着:

monthly_mean = ddply(df, .(YR, MO), summarise, mean_temp = mean(temp))

或获取整个数据集的月平均值(30年,即气候中的法线),而不是每年:

monthly_mean_normals = ddply(df, .(MO), summarise, mean_temp = mean(temp))