从xts对象提取星期和日期到列

时间:2016-02-01 20:40:30

标签: r xts quantmod

我想获得xts对象的周和日。我试图提取我的数据集的索引值(基于使用quantmod包的SPY数据)但没有成功。我怎么能这样做?

 require(quantmod)
 options(scipen=999)
 spy<-getSymbols(("SPY") , src = 'yahoo', from = '2007-01-01',  auto.assign = T)
 tail(SPY)          
 SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
2016-01-22   189.78   190.76  188.88    190.52  163849600       190.52
2016-01-25   189.92   190.15  187.41    187.64  122676200       187.64
2016-01-26   188.42   190.53  188.02    190.20  137269900       190.20
2016-01-27   189.58   191.56  187.06    188.13  181677100       188.13
2016-01-28   189.96   190.20  187.16    189.11  139970600       189.11
2016-01-29   190.02   193.88  189.88    193.72  195455400       193.72
 SPY$Date<-as.Date(index(SPY))
 tail(SPY)
           SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume   Date
2016-01-22   189.78   190.76  188.88    190.52  163849600 190.52
2016-01-25   189.92   190.15  187.41    187.64  122676200 187.64
2016-01-26   188.42   190.53  188.02    190.20  137269900 190.20
2016-01-27   189.58   191.56  187.06    188.13  181677100 188.13
2016-01-28   189.96   190.20  187.16    189.11  139970600 189.11
2016-01-29   190.02   193.88  189.88    193.72  195455400 193.72

 SPY$Date<-as.character(index(SPY))
 tail(SPY)
           SPY.Open     SPY.High     SPY.Low      SPY.Close    SPY.Volume  Date        
2016-01-22 "189.779999" "190.759995" "188.880005" "190.520004" "163849600" "2016-01-22"
2016-01-25 "189.919998" "190.149994" "187.410004" "187.639999" "122676200" "2016-01-25"
2016-01-26 "188.419998" "190.529999" "188.020004" "190.199997" "137269900" "2016-01-26"
2016-01-27 "189.580002" "191.559998" "187.059998" "188.130005" "181677100" "2016-01-27"
2016-01-28 "189.960007" "190.199997" "187.160004" "189.110001" "139970600" "2016-01-28"
2016-01-29 "190.020004" "193.880005" "189.880005" "193.720001" "195455400" "2016-01-29"

2 个答案:

答案 0 :(得分:2)

你可以尝试

week_days <- weekdays(index(SPY))

要将这些工作日作为xts对象中的列添加,请尝试两次

SPY$SPY.week_days <- week_days

第一次尝试将生成警告消息并创建一个充满NA s的新列,第二次尝试将正确填充该新列。这当然是一种更清洁的方式,但它是一种应该有效的快速解决方案。

但是,正如@nrussell所指出的,这会将整个数据转换为字符,因此您必须使用as.numeric()来提取OHLC值。或者,正如@nrussell建议的那样,改为使用data.frame。

可以通过以下方式获得一年中的一周:

library(lubridate)
SPY$SPY.week <- week(index(SPY))

由于week()会生成一个数字向量,因此您无法将此列作为列添加到xts对象中。这与weekdays()的字符输出形成对比,后者带来了上面讨论的问题。

答案 1 :(得分:2)

您可以使用.indexwday来获取索引的工作日。它会从索引的wday表示中返回POSIXlt向量,因此请参阅?POSIXlt详细信息部分以获取说明。

require(quantmod)
getSymbols("SPY")
SPY$weekday <- .indexwday(SPY)