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條經驗 獲得超8個贊
所有現有的答案都是不完美的(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 關注
- 717 瀏覽
添加回答
舉報