如何将xts对象的子集仅包括工作日(周一至周五,周六和周日除外)?
答案 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
问题,而是基本日期处理。