3 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
那這個(gè)呢:
# 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()在包中l(wèi)ubridate。你怎么看?

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
所有現(xiàn)有的答案都是不完美的(IMO),要么對所需的輸出做出假設(shè),要么不為所需的輸出提供靈活性。
根據(jù)OP中的示例和OP所述的預(yù)期答案,我認(rèn)為這些是您正在尋找的答案(以及一些可以輕松推斷的其他示例)。
(這只需要基地R,不需要?jiǎng)游飯@或勞動(dòng)力)
轉(zhuǎn)換為Datetime對象
date_strings = c("14.01.2013", "26.03.2014")datetimes = strptime(date_strings, format = "%d.%m.%Y") # convert to datetime objects
天數(shù)的差異
您可以在幾天內(nèi)使用差異來獲得我們以后的一些答案
diff_in_days = difftime(datetimes[2], datetimes[1], units = "days") # daysdiff_in_days#Time difference of 435.9583 days
周的差異
差異周是一個(gè)特殊的情況下,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中獲得數(shù)年
diff_in_years = as.double(diff_in_days)/365 # absolute yearsdiff_in_years#[1] 1.194406
你似乎期待多年來的差異是“1”,所以我假設(shè)你只想計(jì)算絕對日歷年或其他東西,你可以通過使用它輕松做到 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
幾個(gè)月的差異
可以將其計(jì)算為diff_years的轉(zhuǎn)換
# 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
我知道這個(gè)問題已經(jīng)過時(shí)了,但考慮到我現(xiàn)在仍然需要解決這個(gè)問題,我想我會(huì)加上我的答案。希望能幫助到你。

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
幾周,你可以使用功能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
持續(xù)數(shù)周不起作用。
以下是cut.POSIXt
用于這些持續(xù)時(shí)間的非常不理想的解決方案,但您可以解決它:
seq1 <- seq(date1,date2, by="days")nlevels(cut(seq1,"months"))15nlevels(cut(seq1,"quarters"))5nlevels(cut(seq1,"years"))2
然而,這是您的時(shí)間間隔跨越的月數(shù),季度或年數(shù),而不是您的時(shí)間間隔的持續(xù)時(shí)間,以月,季度,年為單位(因?yàn)槟切]有恒定的持續(xù)時(shí)間)??紤]到你對@SvenHohenstein做出的評論,我認(rèn)為你可以用它nlevels(cut(seq1,"months")) - 1
來實(shí)現(xiàn)你想要實(shí)現(xiàn)的目標(biāo)。
- 3 回答
- 0 關(guān)注
- 722 瀏覽
添加回答
舉報(bào)