微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试通过“order”函数对 R xts 对象进行排序

如何解决尝试通过“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 举报,一经查实,本站将立刻删除。