2017-01-03 74 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循環)