1)動物園/切斷在zoo Quick Reference vignette出現該函數給出"Date"
類變量,x
,返回相同的日期如果星期五或下週五如果不是:
library(zoo)
nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4)/7) + as.Date(5-4)
更換5 6將會給下週六
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4)/7) + as.Date(6-4)
現在,如果x
是輸入是Date類的,使用cut
,在拿到第一個月它的n再次使用cut
獲得下個月的第一個,使用nextsat
找到下一個星期六,然後減去7得到輸入日期的最後一個星期六。
the.first <- as.Date(cut(x, "month"))
next.month <- as.Date(cut(the.first + 32, "month")
nextsat(next.month) - 7
爲了測試出:
library(zoo)
x <- as.Date("2014-09-15")
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4)/7) + as.Date(6-4)
the.first <- as.Date(cut(x, "month"))
next.month <- as.Date(cut(the.first + 32, "month"))
nextsat(next.month) - 7
## [1] "2014-09-27"
這僅使用矢量功能,所以如果x
是日期的載體仍然是可行的。
1A)動物園/ as.yearmon.Date/as.Date.yearmon我們可以用事實as.Date(as.yearmon(x), frac = 1)
就是as.yearmon.Date
和as.Date.yearmon
是動物園方法月份的最後一天的日期縮短這個:
library(zoo)
x <- as.Date("2014-09-15")
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4)/7) + as.Date(6-4)
nextsat(as.Date(as.yearmon(x), frac = 1) + 1) - 7
## [1] "2014-09-27"
這也是矢量化的。
2)動物園/ lubridate上面沒有使用lubridate但我們可以返工(1)使用lubridate這樣的:
library(zoo)
library(lubridate)
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4)/7) + as.Date(6-4)
x <- as.Date("2014-09-15")
xx <- x
day(xx) <- 1
month(xx) <- month(xx) + 1
nextsat(xx) - 7
## [1] "2014-09-27"
這也向量化。