5

x 是一个充满数据的 xts 对象;为了举例,我们假设 OHLC 数据。我想创建另一个 xts 对象,具有相同的大小和日期戳,但不同的列(例如一些指标)。

我目前的方法感觉很粗糙:

a = x$close
for(nn in 1:10){
    z = analysis(x,nn) #Returns an enhanced version of x
    z2 = z$result   #Get out just the data I want, so I can rename the column
    colnames(z2) = paste("result",nn,sep="_")
    a = cbind(a,z2) #Merge in each result
    }
a$close = NULL  #Tidyup

即我只从 x 中引入一列,任何旧列,只是为了得到结构,然后在最后把它扔掉。(它有效,所以我很高兴,但感觉必须有更好的方法。)

我尝试了一些这样的想法:

a = xts(index(x))
a = xts(orderby=index(x))
a = as.xts(index(x))
a = as.xts(orderby=index(x))

但他们给了我空的 XTS 对象。例如,当我尝试这个时,我得到一个错误:

a$dummy = 1
4

2 回答 2

8

注意参数是order.by,不是orderby。但这并不能解决您的问题。您正在寻找的是:

a <- xts(order.by=index(x))
a <- merge(a, dummy=1)

a$dummy <- 1不起作用,因为 zoo 对象可以是向量或矩阵,而 xts 对象始终是矩阵并且没有$<-.xts方法。

于 2011-07-20T02:24:15.470 回答
1

试试这个:

library(xts)
L <- list()
L$x <- xts(1:4, as.Date(1:4))
L$y <- xts(1:4, as.Date(1:4))
do.call("merge", L)
于 2011-07-20T03:31:08.167 回答