lubridate | 日期类型数据的转换

日期是常见的数据类型。在形式上,日期数据类似于字符串,因此在创建日期变量时通常是从字符串变量转换的。基础工具包base中包含了一些处理日期数据的函数,tidyverse系列的lubridate则是专门处理日期数据的工具包。本文主要介绍这两个 工具包的日期转换函数。

base工具包

base工具包的日期转换函数是as.Date(),它的语法结构如下:

as.Date(x, format,
        tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
        optional = FALSE, ...)
  • x:可被转为日期数据的对象;

  • format:x对应的日期格式;

  • tryFormats:format参数缺失时备选的日期格式。

在R中,日期数据的默认格式yyyy-mm-dd。根据函数语法,当不指定日期格式时,函数会尝试yyyy-mm-ddyyyy/mm/dd两种格式是否符合x的形式,如果不符合则报错或返回NA;当x是向量且元素对应了不止一种格式时,则匹配第一次出现的格式,其余返回NA

as.Date("2021-9-19")
## [1] "2021-09-19"

as.Date("2021/9/19")
## [1] "2021-09-19"

date_vector_1 <- c("2021-9-19", "2021/9/19")
as.Date(date_vector_1)
## [1] "2021-09-19" NA

date_vector_2 <- c("2021/9/19", "2021-9-19")
as.Date(date_vector_1)
## [1] "2021-09-19" NA

《R语言实战》中列举了如下常见的日期格式[1],完整内容可见base工具包的strptime

c6e1fe895b7d3b19c900bf1e8d1e3db0.png

format参数必须与x参数的形式保持一致,否则会得出错误的结果:

as.Date("19/9/21", "%d/%m/%y")
## [1] "2021-09-19"

as.Date("19/9/21")
## [1] "0019-09-21"

lubridate工具包

library(lubridate)

lubridate工具包使用y表示年份,m表示月份,d表示月份的天数,构建了如下几个函数:

  • ymd

  • ydm

  • mdy

  • myd

  • dmy

  • dym

在转换时,根据形式选取对应的函数即可,如dmy()函数用于转换日-月-年形式的日期。下列四行代码的返回结果相同:

dmy("19/9/2021")
dmy("19-9-21")
dmy(190921)
dmy(19092021)
## [1] "2021-09-19"

日期数据的简单运算

library(tidyverse)
data.frame(x = "2021-9-19",
           y = "2021-1-1",
           stringsAsFactors = F) %>%
  mutate(x = as.Date(x),
         y = as.Date(y)) -> data

当日期是以日期格式存在时,就可以调用一些函数对其进行处理。

日期相减得到间隔天数:

data$x - data$y
## Time difference of 261 days

日期加减数字用于推算日期:

data$x + 200
## [1] "2022-04-07"

提取日期的成分:

library(lubridate)
year(data$x)
## [1] 2021
month(data$x)
## [1] 9
day(data$x)
## [1] 19

日期转换为数字:

as.numeric(data$x)
## [1] 18889

data$x - as.Date("1970-1-1")
## Time difference of 18889 days

参考资料

[1]

常见的日期格式: R语言实战,人民邮电出版社,p.73.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值