将 xts 对象中的星期和日期提取到列中
Extract week and day from an xts object into a column
我想获取 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"
你可以试试
week_days <- weekdays(index(SPY))
要将这些工作日添加为 xts 对象中的一列,请尝试 两次
SPY$SPY.week_days <- week_days
第一次尝试将生成一条警告消息并创建一个充满 NA
的新列,第二次尝试将正确填充该新列。当然有更简洁的方法,但它是一种应该有效的快速修复方法。
但是,正如@nrussell 所指出的,这会将整个数据转换为字符,因此您将不得不使用 as.numeric()
来提取 OHLC 值。或者,正如@nrussell 建议的那样,使用 data.frame 代替。
一年中的第几周可以通过以下方式获得:
library(lubridate)
SPY$SPY.week <- week(index(SPY))
由于 week()
生成一个数值向量,因此将它作为列添加到 xts 对象中不会有任何困难。这与 weekdays()
的字符输出形成对比,后者会引发上述问题。
您可以使用 .indexwday
获取索引的工作日。它 returns 来自索引 POSIXlt
表示的 wday
向量,因此请参阅 ?POSIXlt
的 详细信息 部分了解说明。
require(quantmod)
getSymbols("SPY")
SPY$weekday <- .indexwday(SPY)
我想获取 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"
你可以试试
week_days <- weekdays(index(SPY))
要将这些工作日添加为 xts 对象中的一列,请尝试 两次
SPY$SPY.week_days <- week_days
第一次尝试将生成一条警告消息并创建一个充满 NA
的新列,第二次尝试将正确填充该新列。当然有更简洁的方法,但它是一种应该有效的快速修复方法。
但是,正如@nrussell 所指出的,这会将整个数据转换为字符,因此您将不得不使用 as.numeric()
来提取 OHLC 值。或者,正如@nrussell 建议的那样,使用 data.frame 代替。
一年中的第几周可以通过以下方式获得:
library(lubridate)
SPY$SPY.week <- week(index(SPY))
由于 week()
生成一个数值向量,因此将它作为列添加到 xts 对象中不会有任何困难。这与 weekdays()
的字符输出形成对比,后者会引发上述问题。
您可以使用 .indexwday
获取索引的工作日。它 returns 来自索引 POSIXlt
表示的 wday
向量,因此请参阅 ?POSIXlt
的 详细信息 部分了解说明。
require(quantmod)
getSymbols("SPY")
SPY$weekday <- .indexwday(SPY)