在我们处理一些时间序列数据时,经常会碰到各种时间数据,比如“2016-03-03”。很多时候我们需要提取出其中的年、月、日甚至是小时、分、秒,从而可以方便的进行比较、筛选等操作。如果我们自己去实现上述功能,可能会写一个字符串的提取函数,来确定相应的时间单位值。但是,由于时间数据格式多样,总会碰到一些问题。还好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
我们可以看到,直接用year(),month(),day()函数就可以提取相应的数值,同样的函数还有hour(),minute(),second()等:
> hour("2011-08-10 14:20:01")
[1] 14>
minute("2011-08-10 14:20:01")
[1] 20>
second("2011-08-10 14:20:01")
[1] 1
同时,lubridate还提供了函数帮助处理不同排列顺序的年月日数据:
> ymd("20110604")
[1] "2011-06-04"
> mdy("06-04-2011")
[1] "2011-06-04"
> dmy("04/06/2011")
[1] "2011-06-04"
ymd,mdy,dmy分别表示了三种常见的年月日排列方式,通过这种方式我们就可以把不同的日期数据都转化为标准的日期数据。
时间数据运算
此外我们还可以用对时间数据进行加减,这也是很有用的,因为有时候我们要判断两个时间之间的间隔是否超过了某个值:
> minutes(2) ## period
[1] "2M 0S"
> dminutes(2) ## duration
[1] "120s (~2 minutes)"
我们可以看到有两个函数:minutes(),dminutes(),minutes(2)函数表示的2个整分钟的概念,而dminutes()则是具体120秒的概念。这两者之间有何不同呢?可以看下面的例子:
> leap_year(2011) ## regular year
[1] FALSE
> ymd(20110101) + dyears(1)
[1] "2012-01-01"
> ymd(20110101) + years(1)
[1] "2012-01-01"
> leap_year(2012) ## leap year
[1] TRUE
> ymd(20120101) + dyears(1)
[1] "2012-12-31"
ymd(20120101) + years(1)
> [1] "2013-01-01"
leap_year()函数可以判断是否是闰年,而通过上述返回结果我们可以知道,因为dyears(1)表示的365天,所以从2012-01-01一个dyears(1),返回值是2012-12-31,而years(1)则是一个整年的概念,无论是闰年还是非闰年,加上一个years(1)都能返回下一年的相同月日的那一天,在这个例子里就反悔了2013-01-01。
时间区间
lubridate还允许我们定义一个时间区间,例如:
> 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
两个时间段是由--相连的,UTC表示时区,lubridate允许我们在给时间数据赋值的时候加上时区这一项,由于在日常生活中使用可能性较小,这篇文章里就不涉及了。数据分析师培训
> 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
有了时间区间的定义,我们还可以判断一个时间区间是否在另一个时间区间里面,用"%within%"操作符。
> as.period(int1)
[1] "10M 9S"
> int1 / dminutes(1)
[1] 10.15
如上还可以查看或计算一个时间区间的长度。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
完全靠数据决策,真的靠谱吗? 最近几年,“数据驱动”成了商界最火的关键词之一,但靠数据就能走天下?其实不然!那些真正成功 ...
2025-01-09SparkSQL 结构化数据处理流程及原理是什么?Spark SQL 可以使用现有的Hive元存储、SerDes 和 UDF。它可以使用 JDBC/ODB ...
2025-01-09在如今这个信息爆炸的时代,数据已然成为企业的生命线。无论是科技公司还是传统行业,数据分析正在深刻地影响着商业决策以及未来 ...
2025-01-08“数据为王”相信大家都听说过。当前,数据信息不再仅仅是传递的媒介,它成为了驱动经济发展的新燃料。对于企业而言,数据指标体 ...
2025-01-07在职场中,当你遇到问题的时候,如果感到无从下手,或者抓不到重点,可能是因为你掌握的思维模型不够多。 一个好用的思维模型, ...
2025-01-06在现代企业中,数据分析师扮演着至关重要的角色。每天都有大量数据涌入,从社交媒体到交易平台,数据以空前的速度和规模生成。面 ...
2025-01-06在职场中,许多言辞并非表面意思那么简单,有时需要听懂背后的“潜台词”。尤其在数据分析的领域里,掌握常用术语就像掌握一门新 ...
2025-01-04在当今信息化社会,数据分析已成为各行各业的核心驱动力。它不仅仅是对数字进行整理与计算,而是在数据的海洋中探寻规律,从而指 ...
2025-01-03又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-03在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-03在数据分析的江湖里,有两个阵营总是争论不休。一派信奉“大即是美”,认为数据越多越好;另一派坚守“小而精”,力挺质量胜于规 ...
2025-01-02数据分析是一个复杂且多维度的过程,从数据收集到分析结果应用,每一步都是对信息的提炼与升华。可视化分析结果,以图表的形式展 ...
2025-01-02在当今的数字化时代,数据分析师扮演着一个至关重要的角色。他们如同现代企业的“解密专家”,通过解析数据为企业提供决策支持。 ...
2025-01-02数据分析报告至关重要 一份高质量的数据分析报告不仅能够揭示数据背后的真相,还能为企业决策者提供有价值的洞察和建议。 年薪 ...
2024-12-31数据分析,听起来好像是技术大咖的专属技能,但其实是一项人人都能学会的职场硬核能力!今天,我们来聊聊数据分析的核心流程,拆 ...
2024-12-31提到数据分析,你脑海里可能会浮现出一群“数字控”抱着电脑,在海量数据里疯狂敲代码的画面。但事实是,数据分析并没有你想象的 ...
2024-12-31关于数据分析师是否会成为失业高危职业,近年来的讨论层出不穷。在这个快速变化的时代,技术进步让人既兴奋又不安。今天,我们从 ...
2024-12-30数据分析师在现代企业中扮演着关键角色,他们的工作内容不仅丰富多样,还对企业的决策和发展起着重要的作用。正如一个经验丰富的 ...
2024-12-29数据分析师的能力要求 在当今的数据主导时代,数据分析师的角色变得尤为重要。他们不仅需要具备深厚的技术背景,还需要拥有业务 ...
2024-12-29随着技术的飞速发展与行业的持续变革,不少人心中都存有疑问:到了 2025 年,数据分析师还有前途吗?给你分享一篇阿里P8大佬最近 ...
2024-12-29