r-使用lubridate更改日期格式并计算持续时间



我正在尝试使用lubridate包获取数据集中issue_d和last_pymnt_d之间的持续时间。issue_d采用以下格式chr"2015-05-01T00:00:00Z";并且last_pymnt_d在chr〃中;2017年2月";。我需要相同格式的它们(如果"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

如何将这些数据转换为相同的日期格式,然后计算持续时间?

格式字符串的大小写顺序对于分析日期非常重要。

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

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对象是一个年份,小数部分表示月份。CCD_ 7为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, 0), "months")
diff_yearmon
"1 years and 9 months"

相关内容

  • 没有找到相关文章

最新更新