0

我有一组纳斯达克和纽约证券交易所上市公司的历史股价数据。我使用以下代码下载了有关亚马逊股票价格的数据并获取了数据被采样的时间。

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

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

我尝试了几种不同的方法,但没有一种是有效的。我认为 lubridate 包应该很有用,但我不知道如何。POSIXlt 也应该有帮助,但我也想不出一种有效的方法来使用它。

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

请帮忙。

4

3 回答 3

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
于 2014-05-28T05:57:28.723 回答
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"
于 2014-05-28T20:45:27.987 回答
1

您可以使用 lubridate 包非常简单地实现此目的,如下所示:

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

> library(lubridate)
> sampleTimes <- ymd(sampleTimes)
> length(subset(sampleTimes, year(sampleTimes) == 2012 & wday(sampleTimes, label=T) == "Mon"))
[1] 47
于 2014-05-28T06:00:46.443 回答