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。你怎么看?
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
我知道这个问题已经过时了,但考虑到我现在仍然需要解决这个问题,我想我会加上我的答案。希望能帮助到你。
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
来实现你想要实现的目标。
- 3 回答
- 0 关注
- 655 浏览
添加回答
举报