猿问

以星期,月,季度和年为单位获取日期之间的差异

以星期,月,季度和年为单位获取日期之间的差异

我有两个日期let's说14.01.201326.03.2014

我希望以周(?),月(在示例14中),季度(4)和年(1)中得到这两个日期之间的差异。

你知道最好的方法吗?


素胚勾勒不出你
浏览 656回答 3
3回答

交互式爱情

那这个呢:# get difference between dates `"01.12.2013"` and `"31.12.2013"`# weeksdifftime(strptime("26.03.2014", format = "%d.%m.%Y"),strptime("14.01.2013", format = "%d.%m.%Y"),units="weeks")Time difference of 62.28571 weeks# months(as.yearmon(strptime("26.03.2014", format = "%d.%m.%Y"))-as.yearmon(strptime("14.01.2013", format = "%d.%m.%Y")))*12[1] 14# quarters(as.yearqtr(strptime("26.03.2014", format = "%d.%m.%Y"))-as.yearqtr(strptime("14.01.2013", format = "%d.%m.%Y")))*4[1] 4# yearsyear(strptime("26.03.2014", format = "%d.%m.%Y"))-year(strptime("14.01.2013", format = "%d.%m.%Y"))[1] 1as.yearmon()并且as.yearqtr()在包装中zoo。year()在包中lubridate。你怎么看?

qq_遁去的一_1

所有现有的答案都是不完美的(IMO),要么对所需的输出做出假设,要么不为所需的输出提供灵活性。根据OP中的示例和OP所述的预期答案,我认为这些是您正在寻找的答案(以及一些可以轻松推断的其他示例)。(这只需要基地R,不需要动物园或劳动力)转换为Datetime对象date_strings = c("14.01.2013", "26.03.2014")datetimes = strptime(date_strings, format = "%d.%m.%Y") # convert to datetime objects天数的差异您可以在几天内使用差异来获得我们以后的一些答案diff_in_days = difftime(datetimes[2], datetimes[1], units = "days") # daysdiff_in_days#Time difference of 435.9583 days周的差异差异周是一个特殊的情况下,units = "weeks"在difftime()diff_in_weeks = difftime(datetimes[2], datetimes[1], units = "weeks") # weeksdiff_in_weeks#Time difference of 62.27976 weeks请注意,这与将diff_in_days除以7(一周7天)相同as.double(diff_in_days)/7#[1] 62.27976多年的差异使用类似的逻辑,我们可以从diff_in_days中获得数年diff_in_years = as.double(diff_in_days)/365 # absolute yearsdiff_in_years#[1] 1.194406你似乎期待多年来的差异是“1”,所以我假设你只想计算绝对日历年或其他东西,你可以通过使用它轻松做到 floor()# get desired output, given your definition of 'years'floor(diff_in_years)#[1] 1宿舍的差异# get desired output for quarters, given your definition of 'quarters'floor(diff_in_years * 4)#[1] 4几个月的差异可以将其计算为diff_years的转换# months, defined as absolute calendar months (this might be what you want, given your question details)months_diff = diff_in_years*12floor(month_diff)#[1] 14我知道这个问题已经过时了,但考虑到我现在仍然需要解决这个问题,我想我会加上我的答案。希望能帮助到你。

慕村9548890

几周,你可以使用功能difftime:date1&nbsp;<-&nbsp;strptime("14.01.2013",&nbsp;format="%d.%m.%Y")date2&nbsp;<-&nbsp;strptime("26.03.2014",&nbsp;format="%d.%m.%Y")difftime(date2,date1,units="weeks")Time&nbsp;difference&nbsp;of&nbsp;62.28571&nbsp;weeks但是difftime持续数周不起作用。以下是cut.POSIXt用于这些持续时间的非常不理想的解决方案,但您可以解决它:seq1&nbsp;<-&nbsp;seq(date1,date2,&nbsp;by="days")nlevels(cut(seq1,"months"))15nlevels(cut(seq1,"quarters"))5nlevels(cut(seq1,"years"))2然而,这是您的时间间隔跨越的月数,季度或年数,而不是您的时间间隔的持续时间,以月,季度,年为单位(因为那些没有恒定的持续时间)。考虑到你对@SvenHohenstein做出的评论,我认为你可以用它nlevels(cut(seq1,"months")) - 1来实现你想要实现的目标。
随时随地看视频慕课网APP
我要回答