【发布时间】:2012-02-23 16:16:39
【问题描述】:
如何将 xts 对象子集化为仅包含工作日(周一至周五,周六和周日除外)?
【问题讨论】:
如何将 xts 对象子集化为仅包含工作日(周一至周五,周六和周日除外)?
【问题讨论】:
这是我要做的:
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")]
编辑:
cmets 中的 Joshua Ulrich 指出了使用 .indexwday() 的更好解决方案,这是用于提取 xts 类对象索引片段的内置访问器函数家族之一。此外,与 Dirk Eddelbuettel 的解决方案一样,以下内容应该与语言环境无关:
x[.indexwday(x) %in% 1:5]
【讨论】:
.indexwday 函数,所以你的最后一行也可以是:x[.indexwday(x) %in% 1:5]。
help(weekdays) 页面,因为weekdays 没有给出数字结果让我再次恼火。
通过计算给定日期和子集的星期几。在示例中,我使用 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 的问题,而是基本的日期处理。
【讨论】: