R子集XTS工作日

时间:2012-01-31 22:40:31

标签: r xts

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

2 个答案:

答案 0 :(得分: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")]

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

x[.indexwday(x) %in% 1:5]

答案 1 :(得分:7)

通过计算给定日期的星期几和子集。在示例中,我使用的是Date类型,但POSIXlt的强制转换功能与POSIXct日内时间戳的工作方式相同。

> 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"
> 

这确实不是xts问题,而是基本日期处理。