Есть ли пакет R, который будет обрабатывать объекты POSIX и возвращать n-й N-й день недели? - PullRequest
1 голос
/ 26 сентября 2011

Я написал функцию, которая при наличии диапазона дат, имени определенного дня недели и вхождения этого дня в данном месяце (например, вторая пятница каждого месяца) будет возвращать соответствующая дата. Однако, это не очень быстро, и я не на 100% убежден в его надежности. Есть ли в R пакет или набор функций, которые могут выполнять такие операции над объектами POSIX? Заранее спасибо!

Ответы [ 2 ]

6 голосов
/ 26 сентября 2011

Используя функцию nextfri, чей однострочный источник показан в виньетке zoo Quick Reference *1003* в пакете zoo , следующая вторая пятница дает 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 не входит в пакет зоопарка - вам нужно ввести его самостоятельно - но это только одна строка)

Ниже приводится день недели, когда 0 - воскресенье, 1 - понедельник и т. Д.

> as.POSIXlt(d)$wday
[1] 4 6

Если вы действительно имеете дело исключительно с датами, а не с датами, тогда вам следуетиспользовать класс "Date" вместо классов "POSIXt", чтобы избежать ошибок часового пояса.Смотрите статью в R News 4/1 .

0 голосов
/ 26 сентября 2011

Пакет timeDate обладает некоторыми из этих функций;Я основал этот небольшой фрагмент кода на некотором коде этого пакета.Это для Date с, 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")
}
...