R子集XTS工作日

Kyl*_*ndt 13 r xts

如何将xts对象的子集仅包括工作日(周一至周五,周六和周日除外)?

Jos*_*ien 16

这是我要做的:

library(xts)
data(sample_matrix)
sample.xts <- as.xts(sample_matrix, descr='my new xts object')
x <-  sample.xts['2007']  
x[!weekdays(index(x)) %in% c("Saturday", "Sunday")]
Run Code Online (Sandbox Code Playgroud)

编辑:Joshua Ulrich在评论中指出了一个更好的解决方案,使用.indexwday()一系列内置访问器函数来提取xts类对象的索引.此外,与Dirk Eddelbuettel的解决方案一样,以下内容应与区域设置无关:

x[.indexwday(x) %in% 1:5]
Run Code Online (Sandbox Code Playgroud)

  • +1注意有`.indexwday`函数,所以你的最后一行也可能是:`x [.indexwday(x)%in%1:5]`. (9认同)
  • 我基本上显示了相同的答案,但依赖于数字工作日,使其独立于所使用的语言环境. (2认同)

Dir*_*tel 7

通过计算给定日期的星期几和子集.在这个例子中,我使用了一个Date类型,但是强制转换POSIXltPOSIXct日内时间戳以相同的方式工作.

> mydates <- Sys.Date() + 0:6
> mydates
[1] "2012-01-31" "2012-02-01" "2012-02-02" "2012-02-03" "2012-02-04" 
+   "2012-02-05" "2012-02-06"
> we <- sapply(mydates, function(d) { as.POSIXlt(d)$wday}) %in% c(0, 6)
> we
[1] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
> mydates[ ! we ]
[1] "2012-01-31" "2012-02-01" "2012-02-02" "2012-02-03" "2012-02-06"
> 
Run Code Online (Sandbox Code Playgroud)

这真的不是一个xts问题,而是基本的日期处理.