这一定非常简单,但我似乎无法找到解决方案。我需要比较2 Close
个对象的xts
值
我有2个xts
个对象:
>low2
low2 daco.Close
2013-07-24 6.63
>low3
low3 daco.Close
2013-07-24 2.63
但是当我尝试这样的事情时
if(low2$daco.Close < low3$daco.Close) {...}
我一直收到错误
Error in if (low2$daco.Close < low3$daco.Close) { :
argument is of length zero
即使我尝试print(low2)
或print(low3)
,我也会得到正确的值。
如何解决这个问题的任何提示将非常感激。 谢谢!
修改:
以下是low2
和low3
> dput(low2)
structure(6.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct",
"POSIXt")), class = c("xts", "zoo"), index = structure(1374451200, tzone = "UTC", tclass = "Date"), .Dim = c(1L,
1L), .Dimnames = list(NULL, "daco.Close"))
> dput(low3)
structure(2.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct",
"POSIXt")), class = c("xts", "zoo"), index = structure(1374624000, tzone = "UTC", tclass = "Date"), .Dim = c(1L,
1L), .Dimnames = list(NULL, "daco.Close"))
答案 0 :(得分:1)
xts对象在操作完成之前按索引对齐。请注意,low2$daco.Close + low3$daco.Close
可能不会返回您的想法。
这是您传递给if
声明的内容:
> low2$daco.Close < low3$daco.Close
[,1]
> str(low2$daco.Close < low3$daco.Close)
An 'xts' object of zero-width
您可以在一个或两个xts对象上使用coredata
。
low2$daco.Close < coredata(low3$daco.Close)
# daco.Close
#2013-07-22 FALSE
或者您可以先将其中一个或两个强制转换为numeric
as.numeric(low2$daco.Close) < as.numeric(low3$daco.Close)
#[1] FALSE
如果他们确实拥有相同的索引,那么它本应该有效。
index(low3) <- index(low2)
low2$daco.Close < low3$daco.Close
# daco.Close
#2013-07-22 FALSE