R的数据类型与相应运算
(学习资料参考北京大学李东风老师《R语言教程》)
9 R日期时间
9.1 R日期和日期时间类型
R日期可以保存为Date类型, 一般用整数保存,数值为从1970-1-1经过的天数。
R中用一种叫做 POSIXct 和 POSIXlt 的特殊数据类型保存日期和时间, 可以仅包含日期部分,也可以同时有日期和时间。 技术上,POSIXct把日期时间保存为从1970年1月1日零时到该日期时间的时间间隔秒数, 所以数据框中需要保存日期时用POSIXct比较合适, 需要显示时再转换成字符串形式;POSIXlt把日期时间保存为一个包含年、月、日、星期、时、分、秒等成分的列表, 所以求这些成分可以从POSIXlt格式日期的列表变量中获得。 日期时间会涉及到所在时区、夏时制等问题, 比较复杂。
基础的R用 as.Date()、as.POSIXct() 等函数生成日期型和日期时间型, R扩展包lubridate提供了多个方便函数, 可以更容易地生成、转换、管理日期型和日期时间型数据。
library(lubridate)
ps.这步很重要,一定要先导入包才能使用日期

9.2 从字符串生成日期数据
- 函数lubridate::today()返回当前日期:
today()
结果如下:

- 函数lubridate::now()返回当前日期时间:
now()
结果如下:

(结果显示中出现的CST是时区, 这里使用了操作系统提供的当前时区。 CST不是一个含义清晰的时区, 在不同国家对应不同的时区, 在中国代表中国标准时间(北京时间)。)
- 用lubridate::ymd(), lubridate::mdy(), lubridate::dmy()将字符型向量转换为日期型向量,如:
ymd(c("1998-3-10", "2018-01-17", "18-1-17"))
mdy(c("3-10-1998", "01-17-2018"))
dmy(c("10-3-1998", "17-01-2018"))
结果如下:
- 在年号只有两位数字时,默认对应到1969-2068范围
lubridate::make_date(year, month, day)可以从三个数值构成日期向量。 如:
make_date(1998, 3, 10)

- lubridate包的
ymd、mdy、dmy等函数添加hms、hm、h等后缀, 可以用于将字符串转换成日期时间。 如:
ymd_hms("1998-03-16 13:15:45")
结果如下,这里的UTC是是时区, UTC是协调世界时(Universal Time Coordinated)英文缩写, 是由国际无线电咨询委员会规定和推荐, 并由国际时间局(BIH)负责保持的以秒为基础的时间标度。 UTC相当于本初子午线(即经度0度)上的平均太阳时, 过去曾用格林威治平均时(GMT)来表示. 北京时间比UTC时间早8小时, 以1999年1月1日0000UTC为例, UTC时间是零点, 北京时间为1999年1月1日早上8点整。

7. 在 Date() 、as.DateTime() 、ymd() 等函数中, 可以用 tz= 指定时区, 比如北京时间可指定为 tz="Etc/GMT+8" 或 tz="Asia/Shanghai" 。
8. lubridate::make_datetime(year, month, day, hour, min, sec)可以从最多六个数值组成日期时间, 其中时分秒缺省值都是0。 如:
make_datetime(1998, 3, 16, 13, 15, 45.2)

- 用
lubridate::as_date()可以将日期时间型转换为日期型,如:
as_date(as.POSIXct("1998-03-16 13:15:45"))
(这时就会忽略后面的时间,输出的是日期)
- 用
lubridate::as_datetime()`可以将日期型数据转换为日期时间型,如:
as_datetime(as.Date("1998-03-16"))

9.3 日期显示格式
- 用
as.character()函数把日期型数据转换为字符型, 如:
x <- as.POSIXct(c('1998-03-16', '2015-11-22'))
as.character(x

本文详细介绍了R语言中处理日期和时间的各种方法,包括日期时间类型如Date、POSIXct和POSIXlt,以及如何从字符串生成日期、日期显示格式、访问日期时间组成值、日期舍入计算和日期计算。特别提到了lubridate包的强大功能,如ymd、now、today等函数,并展示了如何处理时区、日期格式转换和日期时间的加减运算。此外,还探讨了基本R软件的日期功能,如生成日期时间、取出组成值和日期计算。
最低0.47元/天 解锁文章
1008

被折叠的 条评论
为什么被折叠?



