我想生成一个包含全年所有星期五日期的数据框.有一个简单的方法吗?
例如2013年12月:(6/12/13,13/12/13,20/12/13,27/12/13)
谢谢您的帮助.
我确信有一种更简单的方法,但你可以很容易地暴力破解它:
dates <- seq.Date(as.Date("2013-01-01"),as.Date("2013-12-31"),by="1 day")
dates[weekdays(dates)=="Friday"]
dates[format(dates,"%w")==5]
Run Code Online (Sandbox Code Playgroud)
基于@Frank 的出色工作,您可以找到两个日期之间的所有特定工作日,如下所示:
pick.wkday <- function(selday,start,end) {
fwd.7 <- start + 0:6
first.day <- fwd.7[as.numeric(format(fwd.7,"%w"))==selday]
seq.Date(first.day,end,by="week")
}
Run Code Online (Sandbox Code Playgroud)
start并且end需要是Date对象,并且selday是您想要的星期几(0-6 代表周日至周六)。
即 - 对于当前查询:
pick.wkday(5,as.Date("2013-01-01"),as.Date("2013-12-31"))
Run Code Online (Sandbox Code Playgroud)
这是一种方式.
d <- as.Date(1:365, origin = "2013-1-1")
d[strftime(d,"%A") == "Friday"]
Run Code Online (Sandbox Code Playgroud)
或者,这将是一种更有效的方法,用于为任意数量的星期五生成数据:
wk1 <- as.Date(seq(1:7), origin = "2013-1-1") # choose start date & make 7 consecutive days
wk1[weekdays(wk1) == "Friday"] # find Friday in the sequence of 7 days
seq.Date(wk1[weekdays(wk1) == "Friday"], length.out=50, by=7) # use it to generate fridays
Run Code Online (Sandbox Code Playgroud)
by=7说去下周五.
length.out控制要生成的星期五的数量.人们还可以to用来控制生成多少星期五(例如使用to=as.Date("2013-12-31")而不是length.out).