微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用lubridate更改日期格式和计算持续时间

如何解决使用lubridate更改日期格式和计算持续时间

我正在尝试使用lubridate软件包获取数据集中的issue_d和last_pymnt_d之间的持续时间。 issue_d采用以下格式,格式为“ 2015-05-01T00:00:00Z”,last_pymnt_d采用以下格式,格式为“ Feb-2017”。我需要使用相同的格式(如果“ my”不是选项,则只需要“ my”或“ myd”就可以了),然后我需要知道在issue_d和last_pymnt_d之间进行计算。

lcDataSet2$issue_d<-parse_date_time(lcDataSet2$issue_d,"myd")

将我的issue_d转换为NA。即使只是尝试以日期格式查看last_pymnt_d,我也会收到以下错误消息

as.Date(lcRawData$last_pymnt_d)
    Error in charToDate(x) : 
    character string is not in a standard unambiguous format

如何将它们设置为相同的日期格式,然后计算持续时间?

解决方法

zoo包为您提供了一个功能as.yearmon,用于将日期隐含到仅包含月份和年份的yearmon对象中。由于您的last_pymnt_d仅是月份和年份,因此您获得的最佳日期差是月份数:

library(zoo)
issue_d <- "2015-05-01T00:00:00Z"
last_pymnt_d <- "Feb-2017"

diff <- as.yearmon(last_pymnt_d,format = "%b-%Y") - as.yearmon(as.Date(issue_d))
diff
1.75

在幕后,yearmon对象是若干年,十进制部分代表月份。 yearmon与1.75的差值为1年零9个月。

diff_months <- paste(round(diff * 12,0),"months")
"21 months"
diff_yearmon <- paste(floor(diff),"years and",round((diff %% 1) * 12,"months")
diff_yearmon
"1 years and 9 months"
,

格式字符串的顺序和字母大小写对于解析日期很重要。

library(lubridate)

parse_date_time('2015-05-01T00:00:00Z','Y-m-d H:M:S')
[1] "2015-05-01 UTC"

parse_date_time('Feb-2017','b-Y')
[1] "2017-02-01 UTC"

如果只需要月份和年份,则可以使用zoo函数

library(zoo)

date1 <- as.yearmon('2015-05-01T00:00:00Z')
[1] "May 2015"

date2 <- as.yearmon('Feb-2017','%b-%Y')
[1] "Feb 2017"

difftime(date2,date1)
Time difference of 642 days

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。