2018-10-26
阅读量:
951
R语言时间数据处理lubridate包
在我们处理一些时间序列数据时,经常会碰到各种时间数据,比如“2016-03-03”。很多时候我们需要提取出其中的年、月、日甚至是小时、分、秒,从而可以方便的进行比较、筛选等操作。如果我们自己去实现上述功能,可能会写一个字符串的提取函数,来确定相应的时间单位值。但是,由于时间数据格式多样,总会碰到一些问题。使用lubridate这个包功能简单但方便快捷。
install.packages('lubridate')
library(lubridate)
无论年月日之间以什么间隔符分隔,lubridate函数总能找到正确的值且返回的是数字值
> year("2016-10-24")
[1] 2016
>year("2016/10/24")
[1] 2016
> month("2016/10/24")
[1] 10
>day("2016/10/24")
[1] 24
处理不同排列顺序的年月日数据
> ymd("20110604")
[1] "2011-06-04"
> mdy("06-04-2011")
[1] "2011-06-04"
> dmy("04/06/2011")
[1] "2011-06-04"
时间数据运算
> minutes(2) ## period
[1] "2M 0S"
> dminutes(2) ## duration
[1] "120s (~2 minutes)"
判断是否闰年
leap_year(2011)
#因为dyears(1)表示的365天,所以从2012-01-01一个dyears(1),返回值是2012-12-31,而years(1)则是一个整年的概念,无论是闰年还是非闰年,加上一个years(1)都能返回下一年的相同月日的那一天,在这个例子里就反悔了2013-01-01。
定义时间区间:两个时间段是由--相连的,UTC表示时区
> arrive<-"2011-08-10 14:00:00"
> leave<-"2011-08-10 14:00:05"
> int<-interval(arrive,leave)
[1] 2011-08-10 14:00:00 UTC--2011-08-10 14:00:05 UTC
判断一个时间区间是否在另一个时间区间里面
> arrive1<-"2011-08-10 13:50:00"
> leave1<-"2011-08-10 14:00:09"
> int1<-interval(arrive1,leave1)
> int1 %within% int
[1] FALSE
> int %within% int1
[1] TRUE
判断一个时间区间是否在另一个时间区间里面
> as.period(int1)
[1] "10M 9S"
> int1 / dminutes(1)
[1] 10.15
103.6940
1
1
关注作者
收藏
评论(0)
发表评论
暂无数据
推荐帖子
0条评论
0条评论
1条评论