热线电话:13121318867

登录
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
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子