【问题标题】:Is there an R package that will handle POSIX objects and return the nth N-day of the week?是否有一个 R 包可以处理 POSIX 对象并返回一周中的第 n 个 N 天?
【发布时间】:2011-11-25 09:29:25
【问题描述】:

我编写了一个函数,当提供一系列日期、一周中特定日期的名称以及给定月份(例如,每个月的第二个星期五)中该天的发生情况时,它将返回对应的日期。但是,它不是很快,我也不是 100% 相信它的稳健性。 R 中是否有一个包或一组函数可以对 POSIX 对象执行这些类型的操作?提前致谢!

【问题讨论】:

    标签: r time posixct weekday


    【解决方案1】:

    使用函数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 中的文章。

    【讨论】:

      【解决方案2】:

      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")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 2011-02-21
        • 2014-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多