我正在处理一个温度读数的数据集,每小时一次,每天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月份的平均温度。我该怎么做?
答案 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))