【问题标题】:Aggregate on two different variables聚合两个不同的变量
【发布时间】:2014-12-10 19:21:10
【问题描述】:

我有一个包含大量观察的数据集,其中包含 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() 函数来实现这一点,但我不知道如何正确使用它来实现它。我在寻找正确的方向吗?如何才能做到这一点?

【问题讨论】:

    标签: r dataframe aggregate


    【解决方案1】:

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

    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
    ...
    

    【讨论】:

    • 先生,这是一个很好的完整答案!谢谢!
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多