为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2019-08-02 16:37:19
以星期,月,季度和年为单位获取日期之间的差异我有两个日期let's说14.01.2013和26.03.2014。我希望以周(?),月(在示例14中),季度(4)和年(1)中得到这两个日期之间的差异。你知道最好的方法吗?
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

那这个呢:


# get difference between dates `"01.12.2013"` and `"31.12.2013"`


# weeks

difftime(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


# years

year(strptime("26.03.2014", format = "%d.%m.%Y"))-

year(strptime("14.01.2013", format = "%d.%m.%Y"))

[1] 1

as.yearmon()并且as.yearqtr()在包装中zoo。year()在包中lubridate。你怎么看?


查看完整回答
反对 回复 2019-08-02
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

所有现有的答案都是不完美的(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

我知道这个问题已经过时了,但考虑到我现在仍然需要解决这个问题,我想我会加上我的答案。希望能帮助到你。


查看完整回答
反对 回复 2019-08-02
?
慕村9548890

TA贡献1884条经验 获得超4个赞

几周,你可以使用功能difftime

date1 <- strptime("14.01.2013", format="%d.%m.%Y")date2 <- strptime("26.03.2014", format="%d.%m.%Y")difftime(date2,date1,units="weeks")Time difference of 62.28571 weeks

但是difftime持续数周不起作用。
以下是cut.POSIXt用于这些持续时间的非常不理想的解决方案,但您可以解决它:

seq1 <- seq(date1,date2, by="days")nlevels(cut(seq1,"months"))15nlevels(cut(seq1,"quarters"))5nlevels(cut(seq1,"years"))2

然而,这是您的时间间隔跨越的月数,季度或年数,而不是您的时间间隔的持续时间,以月,季度,年为单位(因为那些没有恒定的持续时间)。考虑到你对@SvenHohenstein做出的评论,我认为你可以用它nlevels(cut(seq1,"months")) - 1来实现你想要实现的目标。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信