Получить даты определенного дня недели из года в R - PullRequest
3 голосов
/ 07 февраля 2012

Как мне создать список объектов даты (POSIXct или lt) для каждого понедельника года?

Например, этот год будет (в году, месяце, дне):

2012_01_02,
2012_01_09,
2102_01_16,
etc

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

РЕДАКТИРОВАТЬ : Что касается дальнейшего размышления, ниже приведена более понятная функция для выполнения того же действия:

getAllMondays <- function(year) {
    days <- as.POSIXlt(paste(year, 1:366, sep="-"), format="%Y-%j")
    Ms <- days[days$wday==1]
    Ms[!is.na(Ms)]  # Needed to remove NA from day 366 in non-leap years
}
getAllMondays(2012)

Вот функция, которая будет выполнять более общую задачу найти первый понедельник в произвольном году, а затем перечислить его и все другие понедельники в этом году.Он использует seq.POSIXt() и аргумент by = "week" (который также доступен для seq.Date()).

getAllMondays <- function(year) {
    day1 <- as.POSIXlt(paste(year, "01-01", sep="-"))
    day365 <- as.POSIXlt(paste(year, "12-31", sep="-"))

    # Find the first Monday of year
    week1 <- as.POSIXlt(seq(day1, length.out=7, by="day"))
    monday1 <- week1[week1$wday == 1]

    # Return all Mondays in year
    seq(monday1, day365, by="week")
}

head(getAllMondays(2012))
# [1] "2012-01-02 PST" "2012-01-09 PST" "2012-01-16 PST" "2012-01-23 PST"
# [5] "2012-01-30 PST" "2012-02-06 PST"
2 голосов
/ 07 февраля 2012

Я нашел seq.Date, который является частью base.Не уверен, есть ли предостережения для этого метода, но он, кажется, делает то, что я хочу:

x = seq(as.Date("2012/01/02"), as.Date("2013/01/01"), "7 days")
as.POSIXct(x)
1 голос
/ 07 февраля 2012
as.Date("2012_01_02", format="%Y_%m_%d") +seq(0,366,by=7)  # 2012 is a leap year.

Если вы действительно хотите использовать их в качестве DateTimes со всеми сопутствующими хлопотами часовых поясов, то вы можете принудить их с помощью as.POSIXct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...