Class 04 - 日期时间格式

  • R语言中的日期和时间格式
  • tidyverse 和 lubridate 功能包简介
  • tidyverse 简介
  • lubridate 简介
  • 加载 tidyverse 和 lubridate 功能包
  • 处理日期和时间
  • 日期时间的格式
  • 获取当前的日期 today()
  • 获取当前的时间 now()
  • 字符串格式转换为日期格式
  • ymd()
  • mdy()
  • dmy()
  • 字符串格式转换为日期时间格式
  • 时间戳转换为日期 as.POSIXct()
  • 获取日期时间中的 年、月、日等数值
  • 获取年份的数值 year()
  • 获取月份的数值 month()
  • 获取日的数值 day()
  • 获取小时的数值 hour()
  • 获取分钟的数值 minute()
  • 获取秒的数值 second()
  • 在日期+时间中提取日期数据 as_date()


R语言中的日期和时间格式

在这一节中,我们将学习和了解到如何在R中使用tidyverse 功能包 和lubridate 功能包来处理日期和时间类型的数据。接下来,我们将使用 tidyverse 包 和 lubridate 功能包中的工具将R语言中的不同类型的数据转换为日期格式和日期+时间的格式。

tidyverse 和 lubridate 功能包简介

tidyverse 简介

tidyverse是一个用于R语言中的函数式编程环境,它提供了多种用于数据整理、分析和可视化的函数,可以帮助R语言用户快速进行数据清洗、整理、分析和可视化,提高数据处理效率。它涵盖了数据清洗、数据分析、数据可视化等多个方面,包括data.framelmdplyrggplot2muthaplot等函数,使得数据处理更加便捷、高效。

lubridate 简介

lubridate 是一个功能强大的日期和时间处理包,可以在R语言中轻松解析、操作和处理日期和时间数据。它支持多种日期格式,包括ISO 8601CSVExcelOS X 10.4POSIX等,并且可以与其他R包(如dplyrtidyr等)无缝集成,方便地处理结构化数据。lubridate还提供了灵活的函数,可以方便地解析、比较和操作日期和时间数据,例如parse_datedifftimestrptimestrftime等。通过使用lubridate,您可以轻松地解决日期和时间相关的问题,如日期计算、时间比较、时区转换等。

加载 tidyverse 和 lubridate 功能包

在开始处理日期和时间之前,应该同时加载tidyverse和润滑油。lubridatetidyverse的一部分。

第一步:下载安装功能包
首先打开RStudio,我们先来使用install.packages()函数来安装tidyverselubridate 这两个功能包。(如果你已经安装过了就可以跳过这一步)

# 安装 tidyverse 和 lubridate 功能包
# 安装 tidyverse
install.packages('tidyverse')
# 安装 lubridate
install.packages('lubridate')

R语言导入日期数据并改格式 r语言时间格式处理_r语言

tips由于tidyverse是一个多功能的继承包,所以再安装的时候会下载安装很多功能,不用担心,只需要等待程序自己安装完成就OK了。

第二步,加载功能包

当工具包都安装完成后,我们接下来就是要如何使用这两个功能包了。当要使用某一个功能包里的函数的时候,我们需要用library()函数来加载这个功能包,才能够在之后的代码中去调用里面的功能函数。如我们已经安装完成并要使用的tidyverselubridate 这两个包。

# 加载 tidyverse
library(tidyverse)
# 加载 lubridate
library(lubridate)

R语言导入日期数据并改格式 r语言时间格式处理_R语言导入日期数据并改格式_02


当运行代码后,R语言程序就完成了加载。

当遇到如上图的报错的时候,可以参考 https://conflicted.r-lib.org/ 中的解决方案。

其实如果不纠结报错的话,不用理会也行,只是有冲突,并不是用不了)。

如果没有提示报错,那么你就可以放心使用了。

处理日期和时间

我们先来介绍R中日期和时间的数据类型,以及如何将字符串转换为日期+时间格式。

日期时间的格式

R语言中,日期时间格式有三种,

  • 日期格式 (“2016-08-16”)
  • 时间格式 (“20:11:59")
  • 日期+时间 的格式 (“2018-03-31 18:15:48”)

获取当前的日期 today()

当你需要获取今天的日期时,可以用函数today()来得到今天的日期,返回日期格式数据(年-月-日)。(提示:是从你当前电脑的时间中来获取的,如果电脑的日期是错的,那么获取的日期也就不对了。

# 获取当前日期
today()

R语言导入日期数据并改格式 r语言时间格式处理_数据挖掘_03

获取当前的时间 now()

要获得当前日期+时间,可以运行now()函数。请注意,时间显示精确到秒。

# 获取当前日期
now()

R语言导入日期数据并改格式 r语言时间格式处理_r语言_04

字符串格式转换为日期格式

在平时工作中,日期时间数据很多时候是以字符串形式出现,在处理数据时需要先把字符串格式转换为日期格式。这时候我们可以使用lubridate 提供的工具将字符串转换为日期和日期时间。这些工具会自动计算出日期时间格式。

首先,要确定年、月、日在日期中出现的顺序。然后,根据不同的顺序格式来用不同的函数来转换格式。

ymd()

例如 : 对于字符格式为2023-05-15的时候,可以使用函数ymd()

# 转换为日期格式
ymd("2023-05-15")

R语言导入日期数据并改格式 r语言时间格式处理_数据挖掘_05


运行该函数后,R会以yyyy-mm-dd格式返回日期格式。

例如 : 对于字符格式为20230520的时候,可以使用函数ymd()

# 转换为日期格式
ymd(20230520)

R语言导入日期数据并改格式 r语言时间格式处理_python_06

mdy()

例如 : 对于字符格式为May 20th 2023的时候,可以使用函数mdy()

# 转换为日期格式
mdy("May 20th 2023")

R语言导入日期数据并改格式 r语言时间格式处理_数据分析_07

dmy()

例如 : 对于字符格式为15-May-2023的时候,可以使用函数dmy()

# 转换为日期格式
dmy("15-May-2023")

R语言导入日期数据并改格式 r语言时间格式处理_python_08

字符串格式转换为日期时间格式

ymd()dmy() , mdy() 函数的变体ymd_hms(),dmy_hms(),mdy_hms() 创建日期。

# 转换为日期+时间格式
ymd_hms("2023-03-15-06-35-59")
dmy_hms("15-03-2023-06-35-59")
mdy_hms("03-15-2023-06-35-59")

R语言导入日期数据并改格式 r语言时间格式处理_R语言导入日期数据并改格式_09

时间戳转换为日期 as.POSIXct()

在工作中有时候数据库中导出的日期时保存为1992562988这样的一串数字,通常我们都把这种格式称为时间戳格式,这时候需要通过特定的转码工具把这种格式转为日期时间就可以了。

# 定义一个时间戳格式数据
z <- 1992562988
# 转为时间日期格式
as.POSIXct(z, origin = "1960-01-01")

R语言导入日期数据并改格式 r语言时间格式处理_R语言导入日期数据并改格式_10


tips:

  • 通常时间戳格式都是一串十位的数字组成。
  • 但有时会遇到多十一位数字的,如果直接当成时间戳的格式去处理会报错。
  • 其实十一位的一般都是在十位的基础上后面多了加一个0,只要把0去掉就可以正常转换了。
  • (简单的方法可以通过/10,或者去掉最后一个字符来处理)


获取日期时间中的 年、月、日等数值

前面已经完成了把字符串格式的时间格式,转换为日期时间的数据类型。

为什么要进行这个转换呢?

因为对于日期时间的数据类型有专有的提取其中数值的函数。

比如当你只需要日期中的年份的时候可以用year()函数直接提取出来年的值。

下面我们来介绍year(),month(),day(),hour(),minute(),second()这几个函数,分别用来单独提取日期时间中的小时分钟秒钟的数值。

获取年份的数值 year()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
year(x)

R语言导入日期数据并改格式 r语言时间格式处理_数据分析_11

获取月份的数值 month()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
month(x)

R语言导入日期数据并改格式 r语言时间格式处理_R语言导入日期数据并改格式_12

获取日的数值 day()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
day(x)

R语言导入日期数据并改格式 r语言时间格式处理_python_13

获取小时的数值 hour()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
hour(x)

R语言导入日期数据并改格式 r语言时间格式处理_R语言导入日期数据并改格式_14

获取分钟的数值 minute()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
minute(x)

R语言导入日期数据并改格式 r语言时间格式处理_r语言_15

获取秒的数值 second()

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
second(x)

R语言导入日期数据并改格式 r语言时间格式处理_数据分析_16

在日期+时间中提取日期数据 as_date()

R中还可以直接从日期时间中提取出来日期数据

# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
as_date(x)

R语言导入日期数据并改格式 r语言时间格式处理_r语言_17

更多的资料:

如果想要了解更多的R语言中关于处理日期时间的函数,
可以浏览 lubridate 的官方文档 https://lubridate.tidyverse.org/index.html