2017-01-03 76 views
-1

我想成对比较一个xts对象的两列。该XTS对象是从两个单独XTS矢量合并的对象:比较xts对象中的两列

Results<-na.omit(merge(NCG,SMA_10)) 

下面是所得xts对象的结构:

An ‘xts’ object on 2016-04-28/2017-01-01 containing: 
    Data: num [1:171, 1:2] 1.47 1.55 1.54 1.55 1.41 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:2] "NCG" "SMA" 
    Indexed by objects of class: [POSIXlt,POSIXt] TZ: 
    xts Attributes: 
List of 1 
$ na.action:Class 'omit' atomic [1:19] 1 2 3 4 5 6 7 8 9 10 ... 
    .. ..- attr(*, "index")= num [1:19] 1.46e+09 1.46e+09 1.46e+09 1.46e+09 1.46e+09 ... 

的比较只是玩弄周围。那就是:

for (i in 25:nrow(Results)) 
    { 
    if(Results$NCG[i]>Results$SMA_10[i]) 
    { 
    Results$Signal[i]="buy" 
    } 

    } 

此代码将产生错误如下:

Error in .xts(e, .index(e1), .indexCLASS = indexClass(e1), .indexFORMAT 

= indexFormat(e1), : index length must match number of observations 

有没有人有一个想法,为什么这不起作用?我怀疑从两个初始xts对象中删除的值....

+0

请,张贴重复的例子和境界清楚你想要的输出。 – nicola

回答

3

您正试图对名称为Signal的列进行索引操作Results$Signal[i],该列尚未定义。

在尝试访问并更新其中的元素之前,创建列Signal。这里有一个方法:

# Create the column with default values 
Results$Signal <- NA 

for (i in 25:nrow(Results)) 
{ 
    if(Results$NCG[i]>Results$SMA_10[i]) 
    { 
     Results$Signal[i]="buy" 
    } 

} 

(请注意,您的例子会更有效地利用矢量化解决,而不是一个明确的for循环)