2013-08-23 63 views
5

使用「+」運算符遞增日期(或日期 - 時間)時,如何指定增量是以天(或月,或周或年)計?將日期增加一段時間

> Sys.Date() 
[1] "2013-08-23" 
> Sys.Date() + 1 
[1] "2013-08-24" 
> ISOdate(2013,8,23) 
[1] "2013-08-23 12:00:00 GMT" 
> ISOdate(2013,8,23) + 1 
[1] "2013-08-23 12:00:01 GMT" 
+0

您可以創建一個功能... 2周= 7天等。 – Fernando

+0

你怎麼能延長到幾個月,有不同的天數? – gcbenison

+0

是的,我給出了更好的答案。 – Fernando

回答

6

使用lubridate::days

> require(lubridate) 
> Sys.Date() 
[1] "2013-08-23" 
> Sys.Date() + days(1) 
[1] "2013-08-24" 
> ISOdate(2013, 8, 23) 
[1] "2013-08-23 12:00:00 GMT" 
> ISOdate(2013, 8, 23) + days(1) 
[1] "2013-08-24 12:00:00 GMT" 

隨着lubridate,你也可以使用years()seconds()等,也可以定義自己duration

6

你可以使用序列一些基本的計算:

today = Sys.Date() 
fiveWeeksAhead = tail(seq(today, by = 'week', length = 5), 1) 

或者使用包像lubridate如果您需要更高級的功能。

+1

接受「lubridate」答案,因爲它是最簡潔的,但我絕對喜歡「seq」方法,因爲它只是核心R.謝謝! – gcbenison

+2

謝謝。避免外部依賴總是更好,除非你真的需要它。 – Fernando

+1

最好避免外部依賴,除非它爲你節省時間_。 – hadley

1

你可以使用lubridate添加幾天,幾周,幾個月,...這裏是加了一個月的例子,一個星期:

library(lubridate) 
d <- as.Date('2004-01-01') 
month(d) <- month(d) + 1 

#[1] "2004-02-01" 

week(d) <- week(d) + 1 

#[1] "2004-02-08" 
+1

或者你可以用'd < - d + months(1)'添加一個月份,'d < - d + weeks(1)'用'lubridate'添加一個星期。 – ialm