我从纳斯达克和纽约证券交易所的公开交易公司的历史股票价格中得到一组数据。我使用以下代码下载亚马逊股票价格数据,并获取数据采样的时间。
library(quantmod)
amzn <- getSymbols("AMZN",auto.assign=FALSE)
sampleTimes <- index(amzn)
然后我使用grepl来计算2012年收集了多少值。现在我需要计算星期一发生了多少这些值。
我尝试了几种不同的方法,但没有一种方法有效。我认为润滑剂包应该有用,但我无法弄清楚如何。 POSIXlt也应该有所帮助,但我也无法想到使用它的有效方法。
这一定是一个非常简单的问题,但我似乎无法将自己的大脑包裹起来。
请帮忙。
答案 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"