我有一个包含以下列的大data.table
:
timestamp, value, house
该值是例如该房屋的能量的累积值。所以这里有一个小样本:
time value house
2014-10-27 11:40:00 100 2
2014-10-27 15:40:00 150 2
2014-10-27 19:40:30 160 2
2014-10-28 00:00:01 170 2
2014-10-28 20:20:20 180 2
2014-10-27 11:40:00 200 3
2014-10-27 15:40:00 300 3
2014-10-27 19:40:30 400 3
2014-10-28 00:00:01 500 3
2014-10-28 20:20:20 600 3
我希望获得3个条形图:一个是每天每小时平均每个房屋使用量的平均值,一个是每周每天每个房屋使用量的平均值,以及一年中每个房屋每月平均使用量的平均值。 / p>
要获得一天一小时的价值,我想我应该做点像
max(data$value) - min(data$value)
,但每个时间间隔为一小时,也是每个房子。我知道cut(data$time, breaks="hour")
会间隔分开它,但当然不会考虑最大值和最小值之间的差异,也不会考虑它来自的房子。最重要的是,我当然也需要平均值。
我该怎么做?
答案 0 :(得分:1)
首先,我将 time 变量拆分为小时,天,月。方便快捷的方法是使用正则表达式,例如
hour <- str_extract(rl, ' [[:digit:]]{2}')
hour <- substring(hour, 2)
day <- str_extract(rl, '-[[:digit:]]{2} ')
day <- substring(day, 2, 3)
然后我们需要处理累积形式的值,用 diff 反转 cumsum (都来自基础R):
value <- diff(value)
使用data.table语法
创建的一个条形图的汇总数据data[ , .(avg = mean(value)), by=.(house, day)]
或使用看起来更具可读性的聚合(基础)
aggregate(data, value ~ house + day, mean)