更改 xts 对象日期索引

Change xts object date indexing

我有两个股票数据文件 returns。我试图对两者应用相同的功能,但其中一个出现错误。我想找出导致错误的原因,所以我比较了两个 xts 对象的 str 的输出,唯一不同的是:

Indexed by objects of class: [POSIXct,POSIXt] TZ: # this object errors
Indexed by objects of class: [Date] TZ: GMT       # this object works

有没有办法更改 xts 对象中日期的索引,以便 str returns 的输出:Indexed by objects of class: [Date] TZ: GMT?

我使用以下方法生成了日期:seq(as.Date("1963/07/01"), as.Date("2004/12/01"), by = "1 month",tzone="GMT")

一个可重现的例子:

library(xts)
library("PerformanceAnalytics")
load("https://dl.dropboxusercontent.com/u/22681355/data.Rdata")
data(edhec)
data2 <- as.xts(french1)

我要调用的函数是Return.portfolio(),参数是rebalance_on="months"

Return.portfolio(edhec["1997",1:10],rebalance_on="months") #this works
Return.portfolio(data2["1976",1:10],rebalance_on="months") #this does not work

xts:::as.xts.data.frame 默认假定您的 data.frame 的行名应该被强制转换为 POSIXct object/index。如果您想使用不同的 class,请通过 dateFormat= 参数指定给 as.xts

> data2 <- as.xts(french1, dateFormat="Date")
> str(data2)
An ‘xts’ object on 1963-06-30/2004-11-30 containing:
  Data: num [1:498, 1:10] -0.47 4.87 -1.68 2.66 -1.13 2.83 0.79 1.85 3.08 -0.45 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:10] "NoDur" "Durbl" "Manuf" "Enrgy" ...
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
 NULL

虽然我不相信这是你遇到的任何错误的原因,因为如果不指定 dateFormat="Date" 我就不会收到错误。

> data2 <- as.xts(french1)
> Return.portfolio(data2["1976",1:10],rebalance_on="months")
           portfolio.returns
1976-01-31         0.3980000
1976-02-29         0.1017811
1976-03-31         1.3408273
1976-04-30       -11.7395151
1976-05-31         8.0197492
1976-06-30        -0.2550812
1976-07-31         2.5732207
1976-08-31         1.3784635
1976-09-30        -1.6859705
1976-10-31       -21.4958124
1976-11-30         5.6863828
1976-12-31        -7.8071966
Warning message:
In Return.portfolio(data2["1976", 1:10], rebalance_on = "months") :
  weighting vector is null, calulating an equal weighted portfolio