Fil*_*eri 3 indexing r date time-series xts
我想从使用getSymbols获得的时间序列中提取日期,但是当我使用index/index.xts函数时,返回的日期似乎是提前一天.我无法理解为什么在以下代码中发生此行为.
但是,预期的行为是获取与原始时间序列中的对象相对应的Date对象列表.
以下是代码,请注意时间序列SPY的最后日期是2012年8月24日,但索引(SPY)调用的最后一个值是2012年8月23日:
getSymbols("SPY")
tail(SPY)
SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
2012-08-17 142.23 142.30 141.86 142.18 90813700 142.18
2012-08-20 141.98 142.22 141.59 142.19 78255700 142.19
2012-08-21 142.54 143.09 141.45 141.76 105581100 141.76
2012-08-22 141.40 142.05 141.07 141.82 132999200 141.82
2012-08-23 141.47 141.48 140.44 140.66 111406800 140.66
2012-08-24 140.31 141.83 140.22 141.51 99431500 141.51
tail(index(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
Run Code Online (Sandbox Code Playgroud)
感谢所有能回复我帖子的人.
有关会话的其他信息
>sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rbenchmark_0.3.1 fGarch_2110.80.1
[3] fBasics_2160.81 MASS_7.3-20
[5] timeSeries_2160.95 timeDate_2160.95
[7] tseries_0.10-29 quadprog_1.5-4
[9] PerformanceAnalytics_1.0.4.4 quantstrat_0.6.8
[11] blotter_0.8.10 FinancialInstrument_0.15.2
[13] quantmod_0.3-17 TTR_0.21-1
[15] Defaults_1.1-1 xts_0.8-6
[17] zoo_1.7-7 lubridate_1.1.0
[19] stringr_0.6.1 plyr_1.7.1
[21] XML_3.9-4.1
loaded via a namespace (and not attached):
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2 ggplot2_0.9.1
[5] grid_2.15.1 labeling_0.2 lattice_0.20-6 memoise_0.1
[9] munsell_0.3 proto_0.3-9.2 RColorBrewer_1.0-5 reshape2_1.2.1
[13] scales_0.2.1 stabledist_0.6-4 tools_2.15.1
> getDefaults(getSymbols)
NULL
> getSymbolLookup("SPY")
NULL
> showSymbols()
SPY GSPC IBM XLF XLP XLE XLY XLV XLI
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
XLB XLK XLU IEF AAPL DIA MSFT IWM EEM
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
EFA GLD AGG HYG FXE FXY VXX VXZ HIG
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
VTI VEU VNQ DBC XAU gold Gold STOXX50E GOLD
"yahoo" "yahoo" "yahoo" "yahoo" "oanda" "oanda" "oanda" "yahoo" "yahoo"
VIX DEXUSEU EURUSD DEXKOUS EUR=X INR=X
"yahoo" "FRED" "oanda" "FRED" "yahoo" "yahoo"
Run Code Online (Sandbox Code Playgroud)
另请注意,我已通过使用命令从Systematic Investor博客,systeinvestor.wordpress.com安装了一些R代码
setInternet2(TRUE)
con = gzcon(url('systematicportfolio.com/sit.gz', 'rb'))
source(con)
close(con)
Run Code Online (Sandbox Code Playgroud)
解决方案还有其他问题
GSee用户找到答案(谢谢!)指出在我的会话中我屏蔽了index.xts.因此,解决方案是调用xts ::: index.xts(SPY)而不仅仅是index.xts(SPY)来覆盖屏蔽.实际上是命令
> tail(xts:::index.xts(SPY))
Run Code Online (Sandbox Code Playgroud)
返回正确的答案
[1]"2012-08-17""2012-08-20""2012-08-21""2012-08-22""2012-08-23""2012-08-24" -
答案现在又提出了另一个问题:在下面给出了"屏蔽/覆盖"index.xts函数的代码(返回错误的答案,提前一天移动日期):
> index.xts
function (
x # XTS object
)
{
temp = attr(x, 'index')
class(temp)='POSIXct'
if( attr(x, '.indexCLASS')[1] == 'Date')
temp = as.Date(temp)
return(temp)
}
Run Code Online (Sandbox Code Playgroud)
当调用tail(index.xts(SPY))时,为什么这个函数返回错误的结果?这个index.xts函数的代码有什么问题?
比较两个输出(第一个输出错误,第二个提供正确答案):
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(xts:::index.xts(SPY))
[1] "2012-08-17" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23" "2012-08-24"
Run Code Online (Sandbox Code Playgroud)
再次感谢您的时间和关注.
此问题是您运行了一些代码来掩盖xts包中的index.xts方法.在OP的评论中,您告诉我们您运行了此代码
setInternet2(TRUE)
con = gzcon(url('http://www.systematicportfolio.com/sit.gz', 'rb'))
source(con)
close(con)
Run Code Online (Sandbox Code Playgroud)
运行该代码后,index.xts已重新定义(实际上,已屏蔽)
> index.xts
function
(
x # XTS object
)
{
temp = attr(x, 'index')
class(temp)='POSIXct'
if( attr(x, '.indexCLASS')[1] == 'Date')
temp = as.Date(temp)
return(temp)
}
Run Code Online (Sandbox Code Playgroud)
如果将其与xts:::index.xts被屏蔽的函数进行比较,可以看出它是完全不同的.所以,你不能再期待相同的结果了.
如果您从systeportfolio.com/sit.gz下载代码并查看它,您将看到此评论
###############################################################################
# Fast alternative to index(x) for XTS object
# NOTE index.xts is the same name as the index function in the XTS package
###############################################################################
Run Code Online (Sandbox Code Playgroud)
因此,似乎作者故意这样做是为了让它更快.不幸的是,他也使它不那么健壮了.
这段代码实际上给了我相同的结果xts:::index.xts,所以我不能100%肯定你为什么会得到不同的结果.但是,我的猜测是,它具有与改变类做的numeric到POSIXct,然后转换回Date
无论如何,我可能会跑
rm(index.xts)
Run Code Online (Sandbox Code Playgroud)
在获取该代码后删除此"增强".