比较 xts 对象中的两列

Comparing two columns in xts object

我想成对比较 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 对象中删除了值....

您正在尝试对尚未定义的名为 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 循环可以更有效地解决您的示例)