2013-02-27 45 views
3

我正在使用一个数据集,每小时一次,每天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年平均温度。我该怎么做呢?

+0

两个警告:注意删除不完整的日子(或插入它们),而且所有时间的简单平均值**不是**人们通常会考虑的平均温度 - 有一些愚蠢的标准,如温度从9:00开始,体重为0.4加上温度从13点和0.6。 – mbq 2013-02-27 15:25:53

+0

感谢您的支持!现在这只是一个课程项目,不会用于发布。我会考虑未来。 – user2113985 2013-02-27 17:03:02

回答

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)) 
+0

谢谢!我确实使用过这个,虽然我决定去plyr包下面评论 – user2113985 2013-02-27 23:44:19

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)) 
+0

嗨,谢谢!我确实使用这个来标准化我的数据和它的精彩。当我计算monthly_mean_normals时,结果都回来了“NA”,我错过了什么吗?我如何计算1950-1980年的每月(或每日)平均值? – user2113985 2013-02-27 23:46:31

+0

阅读'mean'的文档,特别是'na.rm'。 – 2013-02-28 05:11:57

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) 
+0

谢谢!虽然我决定采用下面评论的plyr软件包,但我确实使用了它 – user2113985 2013-02-27 23:45:46