如何从R中的向量中提取工作日计数

时间:2014-05-28 05:53:26

标签: r lubridate posixlt

我从纳斯达克和纽约证券交易所的公开交易公司的历史股票价格中得到一组数据。我使用以下代码下载亚马逊股票价格数据,并获取数据采样的时间。

library(quantmod)
amzn <- getSymbols("AMZN",auto.assign=FALSE)
sampleTimes <- index(amzn)

然后我使用grepl来计算2012年收集了多少值。现在我需要计算星期一发生了多少这些值。

我尝试了几种不同的方法,但没有一种方法有效。我认为润滑剂包应该有用,但我无法弄清楚如何。 POSIXlt也应该有所帮助,但我也无法想到使用它的有效方法。

这一定是一个非常简单的问题,但我似乎无法将自己的大脑包裹起来。

请帮忙。

3 个答案:

答案 0 :(得分:3)

我认为这就是你所追求的:

table(weekdays(sampleTimes))

##    Friday    Monday  Thursday   Tuesday Wednesday 
##       373       350       376       381       382
根据OP的评论

编辑

do.call(rbind, lapply(split(sampleTimes, substring(sampleTimes, 1, 4)), function(x) {
    table(weekdays(x))
}))

##      Friday Monday Thursday Tuesday Wednesday
## 2007     51     48       51      50        51
## 2008     50     48       50      52        53
## 2009     49     48       51      52        52
## 2010     50     47       51      52        52
## 2011     51     46       51      52        52
## 2012     51     47       51      50        51
## 2013     51     48       50      52        51
## 2014     20     18       21      21        20

答案 1 :(得分:1)

您可以使用如下的lubridate包完成此操作:

编辑:将nrow()替换为length()

> library(lubridate)
> sampleTimes <- ymd(sampleTimes)
> length(subset(sampleTimes, year(sampleTimes) == 2012 & wday(sampleTimes, label=T) == "Mon"))
[1] 47

答案 2 :(得分:1)

只需使用weekdays(.) == "Monday"作为sampleTimes的逻辑索引,并添加它们在2012年的要求:

 head( sampleTimes[ weekdays(sampleTimes)=="Monday"] )
[1] "2007-01-08" "2007-01-22" "2007-01-29" "2007-02-05" "2007-02-12" "2007-02-26"

> head( sampleTimes[ weekdays(sampleTimes)=="Monday" & substr(sampleTimes, 1,4)=="2012"] )
[1] "2012-01-09" "2012-01-23" "2012-01-30" "2012-02-06" "2012-02-13" "2012-02-27"