我有一个包含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()函数实现这一点但我不知道正确使用它来实现它。我在寻找正确的方向吗?如何才能做到这一点?
答案 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
...