сравнение xts с другим объектом xts не работает

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, но сравнение одного xts с другим терпит неудачу.


r xts
person Pauly    schedule 17.08.2011    source источник


Ответы (2)


Логические операторы xts работают точно так же, как математические операторы xts. Если оба аргумента являются объектами xts, значения индекса для обоих аргументов должны совпадать. В вашем случае m1 и m2 имеют разные значения индекса.

m1 > 0
#              one
# 2011-08-20 FALSE
m1 > m2
#     [,1]
m1
#               one
# 2011-08-20 -0.002
m2
#              one
# 2011-08-19 0.011
person Joshua Ulrich    schedule 17.08.2011

Это согласуется с временными рядами в целом. Вы не можете сравнивать (или выполнять какие-либо операции) значения из разных периодов времени. xts защищает от поведения, которое не может происходить естественным образом. Если вам нужно сравнить один период с другим, вам потребуется принудительно использовать coredata() или операторы lag().

person Jeff R    schedule 17.08.2011