灵活的日期时间处理包——lubridate

浏览: 2360

一直想跟大家介绍Hadley Wickham大神写的lubridate包,如果使用该包,你会觉得日期时间型数据可以非常简单而灵活的处理和解析。例如,在实际应用场景中,如何将杂乱的日期字符转换为日期格式;如何返回日期所属的年、季度、月、周数、日、周几等,甚至时时分秒等;如何计算两个时间之间的年数、月数、天数等。下面就逐一介绍一些重要且常用的函数:


is.Date(x)

该函数用来判断对象是否为日期型数据。

is.Date('2016-03-16')
is.Date(as.Date('2016-03-16'))
is.Date(as.Date('2016-03-16 22:56:33'))

image.png

now()

返回系统的日期时间

Sys.Date()

这是base包中的函数,返回系统日期

now()
Sys.Date()

image.png


parse_date_time()

这是一个重磅函数,可以将格式各样的日期时间字符转换为日期时间类型的数据,其中函数中有一个重要的参数,即orders,通过该参数指定可能的日期格式顺序,如年-月-日或月-日-年等顺序。

下面通过例子来说明,例如,在会员信息中往往会出现格式各样的日期时间字符,如:

x <- c('20131113','120315','12/17/1996','09-01-01','2015 12 23','2009-1, 5','Created on 2013 4 6')
parse_date_time(x, orders = c('Ymd','mdy','dmY','ymd'))

image.png
上面各种奇形怪状的日期字符,统统转换成了正确的日期格式。

round_date()

floor_date()

ceiling_date()

这三个函数实际上是截断函数,即将日期或日期时间型数据取整到不同的单位,如年、季、月、日、时等。区别在于第一个是四舍五入取整,第二个是向下取整,第三个是向上取整。举几个例子就明白了:

x <- as.POSIXct("2016-03-16 12:34:59")
x
#四舍五入取整
round_date(x,'hour')
round_date(x,'day')
round_date(x,'year')

image.png

#向下取整
floor_date(x,'hour')
floor_date(x,'day')
floor_date(x,'year')

image.png

#向上取整
ceiling_date(x,'hour')
ceiling_date(x,'day')
ceiling_date(x,'year')

image.png


year()

quarter()

month()

week

day()

wday()

hour()

minute()

second()

这组函数可以返回所属日期的年、月、日、时、分、秒等。例如:

image.png


days_in_month()

返回所属月份的最大天数

x <- as.Date('2015-01-01')
y <- x + months(0:11)
y
days_in_month(y)

image.png


%m+%

由于每个月的最后天数不一样,如果直接在某个月份的最后一天加上指定的月数就会出现错误,这时就得考虑使用%m+%函数了。例如:

x <- as.Date('2015-01-31')
y <- x + months(0:11)
y

image.png


y2 <- x %m+% months(0:11)
y2

image.png
这样就非常灵活的避免了错误的出现。

time_length()

该函数可以非常方便的计算两个日期之间的间隔,包括年、月、日、时、分、秒的间隔。例如:

time1 <- ymd_hms('1989-07-17 17:33:21')
time2 <- now()
#设置两个时间的区间
time_interval <- interval(time1,time2)
time_interval
time_length(time_interval,'year')
time_length(time_interval,'month')
time_length(time_interval,'day')
time_length(time_interval,'hour')
time_length(time_interval,'minute')
time_length(time_interval,'second')

image.png

OK,关于日期时间型数据的处理函数就介绍到这里,其实这么多常用的函数基本上能够解决工作中的需求。如需了解lubridate包中的更多函数,可查看相应的帮助文档。


学习与分享,取长补短,关注小号!


      长按识别二维码 马上关注

推荐 2
本文由 每天进步一点点2015 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

学习啦

要回复文章请先登录注册