我正在尝试使用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"