【发布时间】:2011-11-25 09:29:25
【问题描述】:
我编写了一个函数,当提供一系列日期、一周中特定日期的名称以及给定月份(例如,每个月的第二个星期五)中该天的发生情况时,它将返回对应的日期。但是,它不是很快,我也不是 100% 相信它的稳健性。 R 中是否有一个包或一组函数可以对 POSIX 对象执行这些类型的操作?提前致谢!
【问题讨论】:
我编写了一个函数,当提供一系列日期、一周中特定日期的名称以及给定月份(例如,每个月的第二个星期五)中该天的发生情况时,它将返回对应的日期。但是,它不是很快,我也不是 100% 相信它的稳健性。 R 中是否有一个包或一组函数可以对 POSIX 对象执行这些类型的操作?提前致谢!
【问题讨论】:
使用函数nextfri 其一个行源显示在zoo package 中的zoo Quick Reference vignette 中,下面给出d 的第二个星期五,其中d 是该月第一天的"Date" :
> library(zoo)
> d <- as.Date(c("2011-09-01", "2011-10-01"))
> nextfri(d) + 7
[1] "2011-09-09" "2011-10-14"
(nextfri 不是 zoo 包的一部分——你需要自己输入——但它只有一行)
以下给出星期几,其中 0 是星期日,1 是星期一,等等。
> as.POSIXlt(d)$wday
[1] 4 6
如果您真的只处理日期而不是日期时间,那么您应该使用"Date" 类而不是"POSIXt" 类以避免时区错误。请参阅R News 4/1 中的文章。
【讨论】:
timeDate 包具有部分功能;我将这个小sn-p 代码基于一些打包的代码。这是针对Dates 的,timeDate 具有底层的 POSIX 类型。
nthNdayInMonth <- function(date,nday = 1, nth = 1){
wday <- (as.integer(date) - 3) %% 7
r <- (as.integer(date) + (nth -1) * 7 + (nday - wday)%%7)
as.Date(r,"1970-01-01")
}
【讨论】: