如何解决尝试通过“order”函数对 R xts 对象进行排序
有人可以帮助我理解为什么“order”函数没有按预期对 xts 数据框进行排序?正如您在下面看到的,由于索引显示为已排序,因此 order 函数似乎可以完成其工作。但是,当在 MSFT xts 对象内部应用此索引向量时,将保持原始顺序,并且行顺序不会发生变化。我错过了什么?我意识到应用 str(MSFT) 表明这些值的类型为“chr”,但我认为这无关紧要。
from numpy import linalg as LA
# Some other code ...
# R is a 182 x 182 matrix
det = LA.det(R)
print('|R|:')
print(det) # Prints out 1.528938248893958e-29
tol = 10*det
rank = LA.matrix_rank(R,10*det)
print('Rank of R:')
print(rank) # Prints out 182!
解决方法
您无法更改动物园对象的顺序,并且由于 xts 对象是动物园对象,因此它也适用于 xts。动物园中的 oo 代表有序观察。这样的对象总是按照其时间索引的顺序存储和显示。
您可以像这样从 xts 对象以各种方式创建矩阵或数据框,在这种情况下,您可以执行这些对象允许的任何操作。
as.data.frame(MSFT) # data frame with times as row names
coredata(zoo(MSFT)) # matrix with times as row names
data.matrix(MSFT) # matrix with times as row names
fortify.zoo(MSFT) # data frame with times in column 1
coredata(MSFT) # matrix. No times.
或者这将创建一个动物园对象,其时间为 1,2,3,... 调整后的列。行名称将是关联的日期。
z <- zoo(MSFT,order(order(Ad(MSFT))))
View(coredata(z))
head(coredata(z))
## MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2009-03-09 15.20 15.74 15.10 15.15 66479100 11.58155
## 2009-03-05 15.86 15.88 15.27 15.27 89708500 11.67328
## 2009-03-06 15.35 15.62 14.87 15.28 92821400 11.68093
## 2009-03-02 15.96 16.25 15.72 15.79 80602100 12.07080
## 2009-03-03 16.03 16.24 15.64 15.88 80476600 12.13960
## 2009-03-04 16.12 16.40 15.89 16.12 69285100 12.32307
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。