如何解决使用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 举报,一经查实,本站将立刻删除。