【R语言】必学包之lubridate包

       lubridate包常用于处理时间数据的数据集,提供很便利的解析日期与时间的内置函数。相较于R内置的时间处理函数,lubridate包的处理方法会更快且更加丰富。lubridate包主要有两类函数,一类是处理时点数据(time instants),另一类是处理时段数据(time spans)。

1. 解析日期和时间

     以下的内置函数可用于根据输入向量中年月日元素的顺序解析日期。可以将字符和数字向量中的日期转换为date或者POSIXct对象,这些函数可以识别任意的非数字分隔符(或者无分隔符)的日期元素,只要格式的顺序是正确的,这些函数就可以正确地解析日期,即使输入向量包含不同格式的日期元素。

#解析年月日时间类型
ymd(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年日月时间类型
ydm(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析月日年时间类型
mdy(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析月年日时间类型
myd(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析日月年时间类型
dmy(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析日年月时间类型
dym(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析季度类型
yq(..., quiet = FALSE, tz = NULL, locale = Sys.getlocale("LC_TIME"))
  • …:包含疑似日期类型的字符或数字向量;
  • quiet:逻辑值,TRUE转换后不显示消息;
  • tz:指定时区,为NULL(默认值)直接返回Date对象,否则将带有时区属性的;POSIXct设置为tz;
  • Locale:设置语言环境;
  • truncated:设置可以被截断格式的数量
–	举例1:
library(lubridate)
x <- c(20170101, "2017-01-02", "2017/01/02","201701-02","2017/01-    
02", "2017 01 03", "2017-1-4","2017-1, 5", "Created on 2017 1 6", 
"201701 !!! 07")
#使用ymd解析时间类型,可以解析不同格式的日期元素
ymd(x)

–	举例2:
y <- " aaaa  01aaasd07asdfa2017asdaa"
#使用mdy解析月日年,可以提取出日期元素而不管分隔符
mdy(y)

–	举例3:
z <- "2017-01"
#z缺少日元素,使用ymd解析时显示warning信息,返回NA
ymd(z)
#设置quiet=TRUE,不显示warning信息
ymd(z, quiet = TRUE)
#只缺少日元素,设置truncated>=1即可使用ymd解析
ymd(z, truncated = 1)

z <- "2017"
#只缺少两个元素,设置truncated>=2才可使用ymd解析
ymd(z, truncated = 2)

m <- "1707"
#默认都是缺少右侧的元素,因此此例缺少年,解析为"0000-07-17"
dmy(m, truncated = 1)

#实际表示2017年8月,但是解析过程中有可能造成错误
n <- "1708"
#使用truncated=1解析为2017-08-01
ymd(n, truncated = 1)
#使用truncated=2,n当作1708年,因此解析为1708-01-01
ymd(n, truncated = 2)

–	举例4:
p <- c("2017-1", "2017/02", "2017aaa3", "201704")
#解析为2017年每个季度
yq(p)

 解析月日年时分秒,自动的分配世界标准时间UTC时区给解析后的date。

#解析年月日时分秒时间类型
ymd_hms(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年月日时分时间类型
ymd_hm(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年月日时时间类型
ymd_h(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析日月年时分秒时间类型
dmy_hms(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析日月年时分时间类型
dmy_hm(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析日月年时时间类型
dmy_h(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析月日年时分秒时间类型
mdy_hms(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析月日年时分时间类型
mdy_hm(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析月日年时时间类型
mdy_h(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年日月时分秒时间类型
ydm_hms(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年日月时分时间类型
ydm_hm(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
#解析年日月时时间类型
ydm_h(..., quiet = FALSE, tz = "UTC", locale = Sys.getlocale("LC_TIME"), truncated = 0)
–	举例5:
x <- c(20100101120101, "2009-01-02 12-01-02", "2009.01.03 12:01:03","2009-1-4 12-1-4", "2009-1, 5 12:1, 5",
    "200901-08 1201-08", "2009 arbitrary 1 non-decimal 6 chars 12 in between 1 !!! 6", "OR collapsed formats: 20090107 120107 (as long as prefixed with zeros)", "Automatic wday, Thu, detection, 10-01-10 10:01:10 and p format: AM",
     "Created on 10-01-11 at 10:01:11 PM")
#解析出年月日时分秒
ymd_hms(x)

–	举例6:
x <- c("2011-12-31 12:59:59", "2010-01-01 12:11", "2010-01-01 
12", "2010-01-01")
#解析为年月日时分秒
ymd_hms(x, truncated = 3)
x <- c("2011-12-31 12:59", "2010-01-01 12", "2010-01-01")
ymd_hm(x, truncated = 2)

仅解析时分秒

#解析分秒
ms(..., quiet = FALSE, roll = FALSE)
#解析时分
hm(..., quiet = FALSE, roll = FALSE)
#解析时分秒
hms(..., quiet = FALSE, roll = FALSE)
  • …:时分秒组成的字符向量;
  • quiet:逻辑值,TRUE转换后不显示消息;
  • roll:逻辑值,为TRUE表示自动进位转换,如61秒会转换为1分01秒,默认值为FALSE不转换;
#解析为时分秒对象
hms("7 6 5", "3:23:::2", "2 : 23 : 33", "Finished in 9 hours, 20 min and 4 seconds")
#解析为时分秒对象,秒为0s
hm("6,5")
#解析为时分秒对象报错,Some strings failed to parse,只能使用包含两个数
#字的字符
hm("6,5,4")
#解析为时分秒对象,”-“会被解析为负号, 返回9H 10M -10S"
hms("9:10-10")
#解析为时分秒对象,设置roll为TRUE,自动与分进行运算,返回"9H 9M 50S"
hms("9:10-10",roll = TRUE)
#解析为时分秒对象,设置roll为TRUE,自动与分进行运算,返回"9H 11M 20S"
hms("9:10:80",roll = TRUE)

解析时间过程中如果遇到年月日无序排列的情况可以使用以下函数解析。

#将格式各样的日期时间字符转换为日期时间类型的数据
parse_date_time(x, orders, tz = "UTC", truncated = 0, quiet = FALSE, locale = Sys.getlocale("LC_TIME"), select_formats = .select_formats, exact = FALSE)
#更快速的C解析函数
parse_date_time2(x, orders, tz = "UTC", exact = FALSE, lt = FALSE)
#更快速的C解析函数,需要显式的format
fast_strpt
  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
lubridate是R语言中用于处理日期和时间数据的工具。它提供了一组简单而灵活的函数,可以解析、操作和计算日期和时间对象。lubridate主要分为两类函数:处理时点数据(time instants)和处理时段数据(time spans)。对于时点数据,lubridate提供了函数来解析各种日期和时间格式的数据,并提供了函数来提取日期和时间的各个组成部分,如年、月、日、小时、分钟和秒。对于时段数据,lubridate提供了函数来计算和操作日期和时间之间的差异,如计算两个日期之间的天数、小时数和分钟数等。 以下是使用lubridate处理日期和时间数据的一些常见操作: 1. 解析日期和时间数据: 使用`ymd()`函数解析年-月-日格式的日期数据。 使用`ymd_hms()`函数解析年-月-日 时:分:秒格式的日期时间数据。 2. 提取日期和时间的组成部分: 使用`year()`函数获取日期或时间的年份。 使用`month()`函数获取日期或时间的月份。 使用`day()`函数获取日期或时间的日。 使用`hour()`函数获取日期或时间的小时。 使用`minute()`函数获取日期或时间的分钟。 使用`second()`函数获取日期或时间的秒。 3. 计算日期和时间之间的差异: 使用`interval()`函数创建时间间隔对象。 使用`%--%`运算符计算两个日期或时间之间的差异。 4. 格式化日期和时间数据: 使用`format()`函数将日期和时间对象格式化为指定的字符串格式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值