汇总两个不同的变量

时间:2014-12-09 00:55:04

标签: r dataframe aggregate

我有一个包含3个不同字段的大量观察数据集:

Consumption, Date, Hour
100, 17/12/2010, 00
120, 17/12/2010, 01
105, 17/12/2010, 02
110, 17/12/2010, 03
...
140, 17/12/2010, 23
130, 18/12/2010, 00
145, 18/12/2010, 01
...

我想要实现的是创建一个包含以下3个字段的新数据集:

Consumption, Date, Period
103.5, 17/12/2010, Night
104.9, 17/12/2010, Morning
104.9, 17/12/2010, Afternoon
所以00-08小时之间每天的所有观察都属于夜晚,08-16至早晨和16-23至下午。我的新数据集的字段消耗将存储相应小时之间的观察值的平均值。最后,我想每天只有3次观察而不是现在的24次观察。 我想我可以使用aggregate()函数实现这一点但我不知道正确使用它来实现它。我在寻找正确的方向吗?如何才能做到这一点?

1 个答案:

答案 0 :(得分:3)

首先,拥有更完整的样本数据会很有帮助

set.seed(15)
dd<-data.frame(
    Consumption=rpois(10*12,100),
    Date=rep(seq(as.Date("2012-01-01"), as.Date("2012-01-10"), by="1 day"), each=12),
    Hour=rep(seq(1,24, by=2), 10)
)

第一步是为小时创建一个可分组的分组。您可以使用cut()

轻松完成此操作
dd$Part <- cut(dd$Hour, 
    breaks=c(0,8, 16, 23), 
    labels=c("Night","Morning","Afternoon"), 
    include.lowest=T)

然后你可以使用aggregate()

aggregate(Consumption~Part+Date,dd, mean)

返回

        part       Date Consumption
1      Night 2012-01-01       94.75
2    Morning 2012-01-01      103.00
3  Afternoon 2012-01-01      101.75
4      Night 2012-01-02      105.50
5    Morning 2012-01-02       95.00
...