灵活的日期时间处理包——lubridate
一直想跟大家介绍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'))
now()
返回系统的日期时间
Sys.Date()
这是base包中的函数,返回系统日期
now()
Sys.Date()
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'))
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')
floor_date(x,'hour')
floor_date(x,'day')
floor_date(x,'year')
ceiling_date(x,'hour')
ceiling_date(x,'day')
ceiling_date(x,'year')
year()
quarter()
month()
week
day()
wday()
hour()
minute()
second()
这组函数可以返回所属日期的年、月、日、时、分、秒等。例如:
days_in_month()
返回所属月份的最大天数
x <- as.Date('2015-01-01')
y <- x + months(0:11)
y
days_in_month(y)
%m+%
由于每个月的最后天数不一样,如果直接在某个月份的最后一天加上指定的月数就会出现错误,这时就得考虑使用%m+%函数了。例如:
x <- as.Date('2015-01-31')
y <- x + months(0:11)
y
y2
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')
OK,关于日期时间型数据的处理函数就介绍到这里,其实这么多常用的函数基本上能够解决工作中的需求。如需了解lubridate包中的更多函数,可查看相应的帮助文档。
每天进步一点点2015
学习与分享,取长补短,关注小号!
长按识别二维码 马上关注