2011-08-17 74 views
3
this = 
    structure(c(-0.012, -0.028, -0.044, -0.033, -0.039, -0.042), .Dim = c(3L, 2L), 
    .Dimnames = list(NULL, c("one", "two")), index = structure(
    c(1313643600, 1313730000, 1313816400), tzone = "", tclass = "Date"), 
    .indexCLASS = "Date", .indexTZ = "", class = c("xts", "zoo")) 

m1=last(this$one) - last(this$two) 
m2=first(last(this$one,n=2)) - first(last(this$two,n=2)) 

m1 > 0 #returns a TRUE OR FALSE 
m1 > m2 #breaks 

我知道我可以使用coredata來提取並比較。我不確定這是否是錯誤。似乎並不一致,比較工作,甚至數學運算符在xts對象上工作得很好,但將一個xt與另一個xts比較失敗。xts與另一個xts對象比較不起作用

回答

5

xts邏輯運算符就像xts數學運算符一樣工作。如果兩個參數都是xts對象,則兩個參數的索引值必須匹配。在你的情況下,m1m2有不同的索引值。

m1 > 0 
#    one 
# 2011-08-20 FALSE 
m1 > m2 
#  [,1] 
m1 
#    one 
# 2011-08-20 -0.002 
m2 
#    one 
# 2011-08-19 0.011 
5

這與一般的時間序列一致。您不能比較(或做任何Ops)來自不同時間段的值。 xts實際上防範不可能自然發生的行爲。如果您需要比較一個期間與另一個期間,您需要強制通過coredata()或通過使用lag()操作員。