如何为一年中的每个星期一生成日期对象列表(POSIXct或lt)?
例如,今年将是(年,月,日):
2012_01_02, 2012_01_09, 2102_01_16, etc
答案 0 :(得分:5)
编辑:进一步思考,这是一个更清晰的功能,可以做同样的事情:
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"
答案 1 :(得分:2)
我发现seq.Date
是base
的一部分。不确定这个方法是否有警告,但似乎做了我想要的事情:
x = seq(as.Date("2012/01/02"), as.Date("2013/01/01"), "7 days")
as.POSIXct(x)
答案 2 :(得分:1)
as.Date("2012_01_02", format="%Y_%m_%d") +seq(0,366,by=7) # 2012 is a leap year.
如果您确实希望将它们作为DateTimes以及所有随之而来的时区麻烦,那么您可以使用as.POSIXct
强制它们。