6

我知道开始日期start和最后日期maturity。如何在不考虑周末日期的情况下填写带有日期的向量?例如,假设:

> start = as.Date("2013-02-28");
> maturity = as.Date("2013-03-07");

结果我想得到以下向量:

results
[1] "2013-03-01" "2013-03-04" "2013-03-05" "2013-03-06" "2013-03-07"



> start = as.Date("2013-02-28");
> maturity = as.Date("2013-03-07");
> x <- seq(start,maturity,by = 1)
> x
[1] "2013-02-28" "2013-03-01" "2013-03-02" "2013-03-03" "2013-03-04" "2013-03-05"
[7] "2013-03-06" "2013-03-07"
> x <- x[!weekdays(x) %in% c('Saturday','Sunday')]
> x
[1] "2013-02-28" "2013-03-01" "2013-03-02" "2013-03-03" "2013-03-04" "2013-03-05"
[7] "2013-03-06" "2013-03-07"

结果相同...?

4

2 回答 2

10

可能有十亿种方法可以使用来自多个包的各种功能来做到这一点。但我的第一个想法是简单地制作一个序列,然后删除周末:

x <- seq(as.Date('2011-01-01'),as.Date('2011-12-31'),by = 1)
x <- x[!weekdays(x) %in% c('Saturday','Sunday')]

此答案仅对基于英语的系统有效。例如,在法语版本中,“Saturday”和“Sunday”必须翻译成“samedi”和“dimanche”

于 2013-02-28T15:54:35.867 回答
4

这比@joran 的回答更人性化:) ,但它不依赖于本地时间

dd <- seq(as.Date('2011-01-01'),as.Date('2011-12-31'),by = 1)
dd[! (as.POSIXlt(dd)$wd %in% c(0,1))]

PS:另一种选择,是在申请前设置本地人weekdays

tt <- Sys.getlocale('LC_TIME')
Sys.setlocale('LC_TIME','ENGLISH')
dd <- dd[!weekdays(x) %in% c('Saturday','Sunday')]
Sys.setlocale('LC_TIME',tt)
于 2013-02-28T15:58:09.313 回答