2011-07-20 25 views
4

x是一个充满数据的xts对象;为了举例,我们假设OHLC数据。 我想创建另一个xts对象,具有相同的大小和日期戳,但列不同(例如某些指标)。创建一个带有日期戳但最初没有列的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 

回答

5

注意的说法是order.by,不orderby。这并不能解决你的问题。什么你要找的是:

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

a$dummy <- 1不起作用,因为动物园的对象可以是一个向量或矩阵,而XT​​S对象总是矩阵,并且没有$<-.xts方法。

+0

感谢Joshua。在我的例子中使用a = xts(order.by = index(x))而不是a = x $ close确实有效(即,cbind和合并一样)。然而,$ dummy = 1语法对XTS对象有效;它似乎不适合创建第一列。 (例如,从上面的两行代码示例中,$ dummy2 = 1将起作用!) –

+1

@Darren:抱歉,我不清楚。 '$ dummy < - 1'不适用于在空的xts对象中创建第一列,因为没有'$ < - 。xts'方法意味着调用$ < - 。zoo',并且空的zoo对象被视为像导致'$ < - 。zoo'失败的向量。我试图提供一些关于错误的背景,但可能没有必要。 –

+0

啊哈!谢谢,现在我明白了。 –

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) 
+2

感谢您的回复。我不认为这是回答我的问题(或者你太神秘了;-),但我尝试了它,这是一个有趣的技术,我会试着记住。 –

相关问题