比较xts对象中的两列

时间:2017-01-03 11:02:11

标签: r 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对象中移除了值....

1 个答案:

答案 0 :(得分:3)

您正在尝试对尚未定义的名为Results$Signal[i]的列执行索引操作Signal

在尝试访问和更新其中的元素之前创建列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循环可以更有效地解决您的示例)