我想成对比较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 :(得分: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循环可以更有效地解决您的示例)