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

Trying to sort an R xts object via the 'order' function

有人可以帮助我理解为什么 'order' 函数没有按预期对 xts 数据框进行排序吗?正如您在下面看到的,排序函数似乎完成了它的工作,因为索引看起来是排序的。但是,当在 MSFT xts 对象中应用此索引向量时,原始顺序将保持不变,并且行的顺序不会发生变化。我错过了什么?我意识到应用 str(MSFT) 表明值是 'chr' 类型,但我认为这不重要。

library(quantmod)
getSymbols("MSFT")

sorted_indices <- order(MSFT$MSFT.Adjusted)
sorted_indices
[1] 549 547 548 544 545 546

test <- MSFT[sorted_indices,]
head(test)
MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume
2007-01-03     29.91     30.25    29.40      29.86    76935100
2007-01-04     29.70     29.97    29.44      29.81    45774500
2007-01-05     29.63     29.75    29.45      29.64    44607200
2007-01-08     29.65     30.10    29.53      29.93    50220200
2007-01-09     30.00     30.18    29.73      29.96    44636600
2007-01-10     29.80     29.89    29.43      29.66    55017400
           MSFT.Adjusted
2007-01-03      21.96213
2007-01-04      21.92535
2007-01-05      21.80031
2007-01-08      22.01361
2007-01-09      22.03568
2007-01-10      21.81502

您不能更改动物园对象的顺序,并且由于 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.

或者这将创建一个 zoo 对象,其时间顺序为 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