众所周知,监测数据的时变性是许多人关注的重点。在做数据统计之前我们需要先掌握一些时间数据的处理方法。这里推荐学习lubridate包里头的函数,掌握其中几个函数就能帮我们节省非常多的时间。

还是上一篇那个监测数据,为了之后能统计不同时间尺度的浓度均值,需要先构建对应的时间数据字段。

查看数据:




r语言index函数 r语言ymd函数_把数据对象转成字符串


看起来sample_dt这一列是我们的时间数据了,查看下这一列的属性:


r语言index函数 r语言ymd函数_字符串_02


当前这一列的属性是字符串,因此需要重新定义这一列,让他变成带有时间属性的对象。我们直接比较一下用base包跟lubridate包的ymd_hms()函数:


r语言index函数 r语言ymd函数_r语言index函数_03


r语言index函数 r语言ymd函数_把数据对象转成字符串_04


可以看到ymd_hms能帮我们省去一些参数设置的麻烦。

其实lubridate的函数真正牛啤的是能处理各种奇怪的时间字符串,例如:


r语言index函数 r语言ymd函数_数据_05


仿佛在告诉你识别不了算我输...就问一句变不变态。上面这些字符串想用base包的函数转成时间格式的话肯定是报错的。

sample_dt转换成时间数据之后就可以很简单的定义不同时间尺度的字段了:


r语言index函数 r语言ymd函数_字段_06


上面这个是data.table里新增列的写法,我们直接新增了5个时间特征的列,来看看这些列字段长什么样:


r语言index函数 r语言ymd函数_r语言index函数_07


Week这一列表示Date是所在年份里的第n周,以上图为例,2019-07-08就是2019年的第27周。

最后我们使用difftime来查看一下每一行的时间间隔,这代表了这个监测数据的记录周期:


r语言index函数 r语言ymd函数_字段_08


difftime()实际上就是计算两个时间对象的时间差,上面我们给的分别是raw中1到n-1行的时间及2到n行的时间,得到时间差的向量,再直接传入quantile中计算数据。从输出结果可知这个监测数据的记录周期大概是20秒,时间精度还挺高的。