前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >46-R编程(八:日期类型)

46-R编程(八:日期类型)

作者头像
北野茶缸子
发布2021-12-17 09:10:25
6550
发布2021-12-17 09:10:25
举报
文章被收录于专栏:北野茶缸子的专栏

参考:https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/prog-type-date.html

简介

我们可以直接通过date() 函数获得当前日期。

★R中用一种叫做POSIXct和POSIXlt的特殊数据类型保存日期和时间, 可以仅包含日期部分,也可以同时有日期和时间。技术上,POSIXct把日期时间保存为从1970年1月1日零时到该日期时间的时间间隔秒数, 所以数据框中需要保存日期时用POSIXct比较合适, 需要显示时再转换成字符串形式;POSIXlt把日期时间保存为一个包含年、月、日、星期、时、分、秒等成分的列表, 所以求这些成分可以从POSIXlt格式日期的列表变量中获得。日期时间会涉及到所在时区、夏时制等问题, 比较复杂。”

这里直接使用包lubridate

常用函数如下:

代码语言:javascript
复制
> today()
[1] "2021-03-23"
> date()
[1] "Tue Mar 23 20:54:16 2021"
> now()
[1] "2021-03-23 20:54:19 CST"

这里CST不是一个含义清晰的时区, 其表示操作系统所在的时区,在不同国家对应不同的时区, 在中国代表中国标准时间(北京时间)。

字符串-> 日期

代码语言:javascript
复制
ymd(c("1998-3-10", "2018-01-17", "18-1-17"))
## [1] "1998-03-10" "2018-01-17" "2018-01-17"
mdy(c("3-10-1998", "01-17-2018"))
## [1] "1998-03-10" "2018-01-17"
dmy(c("10-3-1998", "17-01-2018"))
## [1] "1998-03-10" "2018-01-17"
make_date(1998, 3, 10)
## [1] "1998-03-10"
make_datetime(1998, 3, 16, 13, 15, 45.2)
## [1] "1998-03-16 13:15:45 UTC"

d - 日,m - 月,y - 年。

在年号只有两位数字时,默认对应到1969-2068范围。

lubridate包的ymd、mdy、dmy等函数添加hms、hm、h等后缀, 可以用于将字符串转换成日期时间。如:

代码语言:javascript
复制
ymd_hms("1998-03-16 13:15:45")
## [1] "1998-03-16 13:15:45 UTC"

另外在Date()、as.DateTime()、ymd()等函数中, 可以用tz=指定时区, 比如北京时间可指定为tz="Etc/GMT+8"或 tz="Asia/Shanghai"。

代码语言:javascript
复制
> now(tz = "Asia/Shanghai")
[1] "2021-03-23 21:02:12 CST"
> now(tz = "Asia/Tokyo")
[1] "2021-03-23 22:02:19 JST"

访问日期类型数据

代码语言:javascript
复制
year()取出年
month()取出月份数值
mday()取出日数值
yday()取出日期在一年中的序号,元旦为1
wday()取出日期在一个星期内的序号, 但是一个星期从星期天开始, 星期天为1,星期一为2,星期六为7。
hour()取出小时
minute()取出分钟
second()取出秒
代码语言:javascript
复制
wday(as.POSIXct("2018-1-17 13:15:40"))
## [1] 4 # 星期四

我们还可以通过修改这些访问结果,实现对数据的修改:

代码语言:javascript
复制
lubridate的这些成分函数还允许被赋值, 结果就修改了相应元素的值,如

x <- as.POSIXct("2018-1-17 13:15:40")
year(x) <- 2000
month(x) <- 1
mday(x) <- 1
x

## [1] "2000-01-01 13:15:40 CST"

还可以通过专门的函数update 进行修改:

代码语言:javascript
复制
x <- as.POSIXct("2018-1-17 13:15:40")
y <- update(x, year=2000)
y
## [1] "2000-01-17 13:15:40 CST"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 字符串-> 日期
  • 访问日期类型数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档