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.frame、lm、dplyr、ggplot2、muthaplot等函数,使得数据处理更加便捷、高效。
lubridate 简介
lubridate
是一个功能强大的日期和时间处理包,可以在R语言中轻松解析、操作和处理日期和时间数据。它支持多种日期格式,包括ISO 8601、CSV、Excel、OS X 10.4、POSIX等,并且可以与其他R包(如dplyr
、tidyr
等)无缝集成,方便地处理结构化数据。lubridate
还提供了灵活的函数,可以方便地解析、比较和操作日期和时间数据,例如parse_date、difftime、strptime、strftime等。通过使用lubridate
,您可以轻松地解决日期和时间相关的问题,如日期计算、时间比较、时区转换等。
加载 tidyverse 和 lubridate 功能包
在开始处理日期和时间之前,应该同时加载tidyverse
和润滑油。lubridate
是tidyverse
的一部分。
第一步:下载安装功能包
首先打开RStudio,我们先来使用install.packages()
函数来安装tidyverse
和lubridate
这两个功能包。(如果你已经安装过了就可以跳过这一步)
# 安装 tidyverse 和 lubridate 功能包
# 安装 tidyverse
install.packages('tidyverse')
# 安装 lubridate
install.packages('lubridate')
tips :由于tidyverse是一个多功能的继承包,所以再安装的时候会下载安装很多功能,不用担心,只需要等待程序自己安装完成就OK了。
第二步,加载功能包
当工具包都安装完成后,我们接下来就是要如何使用这两个功能包了。当要使用某一个功能包里的函数的时候,我们需要用library()
函数来加载这个功能包,才能够在之后的代码中去调用里面的功能函数。如我们已经安装完成并要使用的tidyverse
和lubridate
这两个包。
# 加载 tidyverse
library(tidyverse)
# 加载 lubridate
library(lubridate)
当运行代码后,R语言程序就完成了加载。
当遇到如上图的报错的时候,可以参考 https://conflicted.r-lib.org/ 中的解决方案。
(其实如果不纠结报错的话,不用理会也行,只是有冲突,并不是用不了)。
如果没有提示报错,那么你就可以放心使用了。
处理日期和时间
我们先来介绍R中日期和时间的数据类型,以及如何将字符串转换为日期+时间格式。
日期时间的格式
在R语言中,日期时间格式有三种,
-
日期格式 (“2016-08-16”)
-
时间格式 (“20:11:59")
-
日期+时间 的格式 (“2018-03-31 18:15:48”)
获取当前的日期 today()
当你需要获取今天的日期时,可以用函数today()
来得到今天的日期,返回日期格式数据(年-月-日)。(提示:是从你当前电脑的时间中来获取的,如果电脑的日期是错的,那么获取的日期也就不对了。)
# 获取当前日期
today()
获取当前的时间 now()
要获得当前日期+时间,可以运行now()
函数。请注意,时间显示精确到秒。
# 获取当前日期
now()
字符串格式转换为日期格式
在平时工作中,日期时间数据很多时候是以字符串形式出现,在处理数据时需要先把字符串格式转换为日期格式。这时候我们可以使用lubridate
提供的工具将字符串转换为日期和日期时间。这些工具会自动计算出日期时间格式。
首先,要确定年、月、日在日期中出现的顺序。然后,根据不同的顺序格式来用不同的函数来转换格式。
ymd()
例如 : 对于字符格式为2023-05-15的时候,可以使用函数ymd()
# 转换为日期格式
ymd("2023-05-15")
运行该函数后,R会以yyyy-mm-dd
格式返回日期格式。
例如 : 对于字符格式为20230520
的时候,可以使用函数ymd()
# 转换为日期格式
ymd(20230520)
mdy()
例如 : 对于字符格式为May 20th 2023
的时候,可以使用函数mdy()
# 转换为日期格式
mdy("May 20th 2023")
dmy()
例如 : 对于字符格式为15-May-2023
的时候,可以使用函数dmy()
# 转换为日期格式
dmy("15-May-2023")
字符串格式转换为日期时间格式
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")
时间戳转换为日期 as.POSIXct()
在工作中有时候数据库中导出的日期时保存为1992562988
这样的一串数字,通常我们都把这种格式称为时间戳格式,这时候需要通过特定的转码工具把这种格式转为日期时间就可以了。
# 定义一个时间戳格式数据
z <- 1992562988
# 转为时间日期格式
as.POSIXct(z, origin = "1960-01-01")
tips:
- 通常时间戳格式都是一串十位的数字组成。
- 但有时会遇到多十一位数字的,如果直接当成时间戳的格式去处理会报错。
- 其实十一位的一般都是在十位的基础上后面多了加一个0,只要把0去掉就可以正常转换了。
- (简单的方法可以通过/10,或者去掉最后一个字符来处理)
获取日期时间中的 年、月、日等数值
前面已经完成了把字符串格式的时间格式,转换为日期时间的数据类型。
为什么要进行这个转换呢?
因为对于日期时间的数据类型有专有的提取其中数值的函数。
比如当你只需要日期中的年份的时候可以用year()
函数直接提取出来年的值。
下面我们来介绍year()
,month()
,day()
,hour()
,minute()
,second()
这几个函数,分别用来单独提取日期时间中的年、月、日、小时、分钟、秒钟的数值。
获取年份的数值 year()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
year(x)
获取月份的数值 month()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
month(x)
获取日的数值 day()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
day(x)
获取小时的数值 hour()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
hour(x)
获取分钟的数值 minute()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
minute(x)
获取秒的数值 second()
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
second(x)
在日期+时间中提取日期数据 as_date()
R中还可以直接从日期时间中提取出来日期数据
# 定义一个变量,把字符串转换为日期时间数据类型
x <- ymd_hms("2023-03-15-06-35-59")
# 从中提取年份
as_date(x)
更多的资料:
如果想要了解更多的R语言中关于处理日期时间的函数,
可以浏览 lubridate 的官方文档 https://lubridate.tidyverse.org/index.html