lubridate包,非常强大,能够识别各种类型的日期.字符型和时间型数据,都是格式比较特别的你数据,在处理时,比较麻烦,但是有了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

同时,lubridate还提供了函数帮助处理不同排列顺序的年月日数据:

> ymd("20110604")
[1] "2011-06-04"
> mdy("06-04-2011")
[1] "2011-06-04"
> dmy("04/06/2011")
[1] "2011-06-04"
> dmy("04062011") 
[1] "2011-06-04"

如果您的日期包含时间信息,添加H,M,和/或s函数的名称。ymd_hms可能是最常见的日期和时间格式。要阅读的具体日期,具有一定的时区,提供在该时区的正式名称tz参数。

ymd_hms("20161120220000")
[1] "2016-11-20 22:00:00 UTC"

> ymd_hms("2016-11-20 22:00:00", tz = "Pacific/Auckland")
[1] "2016-11-20 22:00:00 NZDT"

ymd,mdy,dmy分别表示了三种常见的年月日排列方式,通过这种方式我们就可以把不同的日期数据都转化为标准的日期数据。

时区

为了处理时区信息,lubridate包提供了三个函数:
tz:提取时间数据的时区
with_tz:将时间数据转换为另一个时区的同一时间
force_tz:将时间数据的时区强制转换为另一个时区

有两个非常有用的事情要做日期和时区。首先,显示不同的时区相同的时刻。二,创建由现有的时钟时间与新的时区相结合的新时刻。

这些被完成with_tzforce_tz

输入meeting在Pacific/Auckland的开场时间,再转为America/Chicago时间

> meeting <- ymd_hms("2011-07-01 09:00:00", tz = "Pacific/Auckland");meeting
[1] "2011-07-01 09:00:00 NZST"
> with_tz(meeting, "America/Chicago")    #显示不同的时区相同的时刻
[1] "2011-06-30 16:00:00 CDT"
> mistake <- force_tz(meeting, "America/Chicago");mistake
[1] "2011-07-01 09:00:00 CDT"
> with_tz(mistake, "Pacific/Auckland")
[1] "2011-07-02 02:00:00 NZST"

设置和提取信息

提取与功能的日期时间的信息secondminutehourdaywdayydayweekmonthyear,和tz。您也可以使用这些设置(即改变)给定的信息。请注意,这将改变日期和时间,wdaymonth具有可选的label参数,它取代了他们的数字输出和平日或月的名称。

> year("2011-08-10 14:20:01")
[1] 2011
> minute("2011-08-10 14:20:01")
[1] 20
> week("2011-08-10 14:20:01")
[1] 32

时间间隔

lubridate还允许我们定义一个时间区间,例如:

> interval(ymd(20161101), ymd(20161103))
[1] 2016-11-01 UTC--2016-11-03 UTC

两个时间段是由--相连的,UTC表示时区

date1 <- as.POSIXct("2016-11-08 01:59:59")  #POSIXct: 日期时间类,精确到秒,用数字表示

date2 <- as.POSIXct("2016-12-29 12:00:00")
interval(date1, date2)

[1] 2016-11-08 01:59:59 CST--2016-12-29 12:00:00 CST

date1 <- as.POSIXlt("2016-11-08 01:59:59") #POSIXlt: 日期时间类,精确到秒,用列表表示
date2 <- as.POSIXlt("2016-12-29 12:00:00")
interval(date1, date2)

[1] 2016-11-08 01:59:59 UTC--2016-12-29 12:00:00 UTC

处理日期数据的时候,使用了as.POSIXct函数,但是现在发现一个问题,这个函数貌似不能处理类似于
"%Y-%m-%d %H:%M:%S"的日期格式。

lubridate允许我们在给时间数据赋值的时候加上时区这一项,由于在日常生活中使用可能性较小,这篇文章里就不涉及了。

> int1<-interval(ymd(20161101), ymd(20161103)); int1
有了时间区间的定义,我们还可以判断一个时间区间是否在另一个时间区间里面,用"%within%"操作符。
> as.period(int1)
[1] "2d 0H 0M 0S"
> int1 / dminutes(1)
[1] 2880

如上还可以查看或计算一个时间区间的长度。

把时间间隔保存为一个lubridate间隔类对象。这是非常有用的哦!

间隔是特定的时间跨度(因为它们依赖于具体日期),但也lubridate提供两种一般时间跨度类:持续时间和周期。创建期间辅助功能的时间(复数)的单位命名。创建工期的辅助函数遵循相同的格式,但用“D”(持续时间)开始,或者,如果你喜欢,和“e”(有关详细)。

时间数据运算

此外我们还可以用对时间数据进行加减,这也是很有用的,因为有时候我们要判断两个时间之间的间隔是否超过了某个值:

> minutes(2) ## period
[1] "2M 0S"
> dminutes(2) ## duration
[1] "120s (~2 minutes)"

minutes(2)函数表示的2个整分钟的概念,而dminutes(2)则是具体120秒

dyears(1)表示的365天years(1)则是一个整年的概念

leap_year()函数可以判断是否是闰年

> leap_year(2016) #判断是否是闰年
[1] TRUE
> ymd('20160228')+dyears(1)
[1] "2017-02-27"
> ymd('20160228')+years(1)
[1] "2017-02-28"

矢量

在lubridate代码矢量,并准备在交互式设置和功能内所使用。举个例子,我提供了一个功能,推进的日期当月的最后一天last_day <- function(date) {

  ceiling_date(date, "month") - days(1)
}

####################################

lubridate包主要有两类函数,一类是处理时点数据(time instants),另一类是处理时段数据(time spans)。有了时点和时段数据,就可以进行各种计算了。
时点类函数,它包括了解析、抽取、修改

从字符型数据解析时间,会自动识别各种分隔符
> x <- ymd('2016-11-20');x
[1] "2016-11-20"
观察x日期是一年中的第几天
> yday(x)
[1] 325
 修改x日期中的月份为5月
> month(x) <- 5 ;month(x)
[1] 5

> x
[1] "2016-05-20"

注意点:

时段类函数,它可以处理三类对象,分别是:
interval:最简单的时段对象,它由两个时点数据构成。
duration:去除了时间两端的信息,纯粹以秒为单位计算时段的长度,不考虑闰年和闰秒,它同时也兼容基本包中的difftime类型对象。
period:以较长的时钟周期来计算时段长度,它考虑了闰年和闰秒,适用于长期的时间计算

从两个时点生成一个interval时段数据

> x <- ymd('2016-11-20');x

> y <- interval(x,now());y
从interval格式转为duration格式
> as.duration(y)
时点+时段生成一个新的时点
> now() + as.duration(y)
10天后的时间数据
> now() + ddays(10)

几个月和几年的长度常常这样做算术他们可以直观的改变。考虑一个简单的操作,January 31st + one month。如果答案是:
1,February 31st (不存在)
2,March 4th (1月31日以后31天),或
3,February 28th (假设它不是一个闰年)
但它是一个无效的日期。则使lubridate尽可能一致,如果加上或减去一个月或一年创建一个无效的日期,lubridate将返回NA
2或3的解决方案,或使用特殊的%m+%和%m-%。%m+%并%m-%自动回滚可以追溯到一个月的最后一天,应该说是必要的。

jan31 <- ymd("2013-01-31")
jan31 + months(0:11)
##  [1] "2013-01-31" NA           "2013-03-31" NA           "2013-05-31"
## [6] NA "2013-07-31" "2013-08-31" NA "2013-10-31"
## [11] NA "2013-12-31"
floor_date(jan31, "month") + months(0:11) + days(31)
##  [1] "2013-02-01" "2013-03-04" "2013-04-01" "2013-05-02" "2013-06-01"
## [6] "2013-07-02" "2013-08-01" "2013-09-01" "2013-10-02" "2013-11-01"
## [11] "2013-12-02" "2014-01-01"
jan31 %m+% months(0:11)
##  [1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31"
## [6] "2013-06-30" "2013-07-31" "2013-08-31" "2013-09-30" "2013-10-31"
## [11] "2013-11-30" "2013-12-31"

请注意,这只会影响使用算术个(和算术多年,如果你的起始日期是2月29日)。

R----lubridata包介绍学习的更多相关文章

  1. R----dplyr包介绍学习

    dplyr包:plyr包的替代者,专门面对数据框,将ddplyr转变为更易用的接口 %>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以 ...

  2. R----stringr包介绍学习

    1. stringr介绍 stringr包被定义为一致的.简单易用的字符串工具集.所有的函数和参数定义都具有一致性,比如,用相同的方法进行NA处理和0长度的向量处理. 字符串处理虽然不是R语言中最主要 ...

  3. R----ggplot2包介绍学习

    分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无 ...

  4. R----ggplot2包介绍学习--转载

    https://www.cnblogs.com/nxld/p/6059603.html 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplo ...

  5. R-RMySQL包介绍学习

    参考内容: RMySQL数据库编程指南R语言使用RMySQL连接及读写Mysql数据库 RMySql包安装和加载优点问题,试着根据提示简单安装和加载可以使用,后续再查询资料解决. 3.2.1 连接数据 ...

  6. R----tidyr包介绍学习

    tidyr包:reshape2的替代者,功能更纯粹 tidyr包的应用 tidyr主要提供了一个类似Excel中数据透视表(pivot table)的功能;gather和spread函数将数据在长格式 ...

  7. R----data.table包介绍学习

    相比dplyr包,data.table包能够更大程度地提高数据的处理速度,这里就简单介绍一下data.tale包的使用方法. data.table:用于快速处理大数据集的哦 数据的读取 data.ta ...

  8. R----Shiny包介绍学习

    为什么用Shiny Shiny让数据分析师写完分析与可视化代码后,稍微再花几十分钟,就可以把分析代码工程化,将分析成果快速转化为交互式网页分享给别人.所以,如果你是一名使用R的数据分析师,选择Shin ...

  9. R----plotly包介绍学习

    plotly包:让ggplot2的静态图片变得可交互 Plotly 是个交互式可视化的第三方库,官网提供了Python,R,Matlab,JavaScript,Excel的接口,因此我们可以很方便地在 ...

随机推荐

  1. Java封装

    面向对象的三大特征:封装.继承.多态.封装在书面上来说,他无非就是set和get方法罢了.为什么要用到封装,比如买主机如果没有机箱只有内存条.CPU.主板等等那些零件买回到家,你还得一个个的去装那些零 ...

  2. mongodb 安装后 出现警告:** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

    警告问题:当前mongodb 支持的最大文件数有256个,但是推荐至少1024个. 解决办法: 1.关闭现在打开的mongodb 终端窗口 2.重新打开终端并运行一下命令: sudo launchct ...

  3. php中htmlspecialchars和htmlentiti

    Certain characters have special significance in HTML, and should be represented by HTML entities if ...

  4. Excel 中 Index 和 Match 方法的使用

    MATCH函数(返回指定内容所在的位置) MATCH(lookup-value,lookup-array,match-type) lookup-value:表示要在区域或数组中查找的值,可以是直接输入 ...

  5. 使用 Grafana、collectd 和 InfluxDB 打造现代监控系统

    想打造 New Relic 那样漂亮的实时监控系统我们只需要 InfluxDB/collectd/Grafana 这三个工具,这三个工具的关系是这样的: 采集数据(collectd)-> 存储数 ...

  6. Java 实现MapReduce函数

    明白了MapReduce程序的工作原理之后,下一步就是写代码来实现它.我们需要三样东西:一个map函数.一个reduce函数和一些用来运行作业的代码.map函数由Mapper类来表示,后者声明一个ma ...

  7. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  8. C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结

    // 导入头文件(stdio.h),标准输入输出的头文件,#include <stdio.h> // 程序的入口int main(int argc, const char * argv[] ...

  9. iOS:命令行方式使用OSChina托管私有代码

    一.介绍 在项目开发中,使用版本控制工具是必不可少的开发工具,它可以帮助我们程序员写完代码后及时提交备份,防止因个人操作导致代码被误删除了或者丢失了,安全可靠.同时,使用版本控制器工具也可以很方便的进 ...

  10. xib自定义cell代码规范

    // //  MJTgCell.m //  01-团购 // //  Created by apple on 14-4-1. //  Copyright (c) 2014年 itcast. All r ...