代码容易,但是首先要理解这个问题本身的问题。
你没说采样间隔,那么假定每毫秒采样一次,则5分钟的数据是30万个。说到这,你意识到问题了吗,30万个数据变成一个平均值,那么这个平均值到底有多大意义呢?在这5分钟里,数据的波动、极值等有效信息完全被过滤掉了。如果数据是长期稳定的,很可能最终的每5分钟均值画出来是一条直线。而如果数据有长期变化趋势,5分钟的窗口选择就会影响到均值结果。
如果你能理解上面说的,那么就会明白,用窗口平均值这种简单处理方法是不对的。
换一个角度看问题,毫秒级数据,已经可以近似作为线性数据了,数据越是线性越能反映真实变化,而用窗口均值,越是离散化,信息量越小。所以说,你想用的这种处理方法,简单,粗暴,不是好方法。
从实际需要出发,原始数据量太大,而你可能只是想观察长期变化趋势吧。那么有一种方法,您试试:
stats包有个decompose()函数,可以从时间序列中分解出trend数据。
但是这也有个问题,数据太大的话,即使只是计算均值,对系统的计算能力也是挑战,何况复杂的decompose运算。
而对于长期实时采样数据,比较现实的一种方法是增大采样间隔,或者只记录每个采样窗口内的上下两个极值。